mavlink/home/runner/work/rust-mavlink/rust-mavlink/target/debug/build/mavlink-82e5138eb12fa796/out/
common.rs

1#![doc = "MAVLink common dialect."]
2#![doc = ""]
3#![doc = "This file was automatically generated, do not edit."]
4#![allow(deprecated)]
5#[cfg(feature = "arbitrary")]
6use arbitrary::Arbitrary;
7#[allow(unused_imports)]
8use bitflags::bitflags;
9use mavlink_core::{bytes::Bytes, bytes_mut::BytesMut, MavlinkVersion, Message, MessageData};
10#[allow(unused_imports)]
11use num_derive::FromPrimitive;
12#[allow(unused_imports)]
13use num_derive::ToPrimitive;
14#[allow(unused_imports)]
15use num_traits::FromPrimitive;
16#[allow(unused_imports)]
17use num_traits::ToPrimitive;
18#[cfg(feature = "serde")]
19use serde::{Deserialize, Serialize};
20#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
21#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
22#[cfg_attr(feature = "serde", serde(tag = "type"))]
23#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24#[repr(u32)]
25#[doc = "Actuator configuration, used to change a setting on an actuator. Component information metadata can be used to know which outputs support which commands."]
26pub enum ActuatorConfiguration {
27    #[doc = "Do nothing."]
28    ACTUATOR_CONFIGURATION_NONE = 0,
29    #[doc = "Command the actuator to beep now."]
30    ACTUATOR_CONFIGURATION_BEEP = 1,
31    #[doc = "Permanently set the actuator (ESC) to 3D mode (reversible thrust)."]
32    ACTUATOR_CONFIGURATION_3D_MODE_ON = 2,
33    #[doc = "Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust)."]
34    ACTUATOR_CONFIGURATION_3D_MODE_OFF = 3,
35    #[doc = "Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise)."]
36    ACTUATOR_CONFIGURATION_SPIN_DIRECTION1 = 4,
37    #[doc = "Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1)."]
38    ACTUATOR_CONFIGURATION_SPIN_DIRECTION2 = 5,
39}
40impl ActuatorConfiguration {
41    pub const DEFAULT: Self = Self::ACTUATOR_CONFIGURATION_NONE;
42}
43impl Default for ActuatorConfiguration {
44    fn default() -> Self {
45        Self::DEFAULT
46    }
47}
48#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
49#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
50#[cfg_attr(feature = "serde", serde(tag = "type"))]
51#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
52#[repr(u32)]
53#[doc = "Actuator output function. Values greater or equal to 1000 are autopilot-specific."]
54pub enum ActuatorOutputFunction {
55    #[doc = "No function (disabled)."]
56    ACTUATOR_OUTPUT_FUNCTION_NONE = 0,
57    #[doc = "Motor 1"]
58    ACTUATOR_OUTPUT_FUNCTION_MOTOR1 = 1,
59    #[doc = "Motor 2"]
60    ACTUATOR_OUTPUT_FUNCTION_MOTOR2 = 2,
61    #[doc = "Motor 3"]
62    ACTUATOR_OUTPUT_FUNCTION_MOTOR3 = 3,
63    #[doc = "Motor 4"]
64    ACTUATOR_OUTPUT_FUNCTION_MOTOR4 = 4,
65    #[doc = "Motor 5"]
66    ACTUATOR_OUTPUT_FUNCTION_MOTOR5 = 5,
67    #[doc = "Motor 6"]
68    ACTUATOR_OUTPUT_FUNCTION_MOTOR6 = 6,
69    #[doc = "Motor 7"]
70    ACTUATOR_OUTPUT_FUNCTION_MOTOR7 = 7,
71    #[doc = "Motor 8"]
72    ACTUATOR_OUTPUT_FUNCTION_MOTOR8 = 8,
73    #[doc = "Motor 9"]
74    ACTUATOR_OUTPUT_FUNCTION_MOTOR9 = 9,
75    #[doc = "Motor 10"]
76    ACTUATOR_OUTPUT_FUNCTION_MOTOR10 = 10,
77    #[doc = "Motor 11"]
78    ACTUATOR_OUTPUT_FUNCTION_MOTOR11 = 11,
79    #[doc = "Motor 12"]
80    ACTUATOR_OUTPUT_FUNCTION_MOTOR12 = 12,
81    #[doc = "Motor 13"]
82    ACTUATOR_OUTPUT_FUNCTION_MOTOR13 = 13,
83    #[doc = "Motor 14"]
84    ACTUATOR_OUTPUT_FUNCTION_MOTOR14 = 14,
85    #[doc = "Motor 15"]
86    ACTUATOR_OUTPUT_FUNCTION_MOTOR15 = 15,
87    #[doc = "Motor 16"]
88    ACTUATOR_OUTPUT_FUNCTION_MOTOR16 = 16,
89    #[doc = "Servo 1"]
90    ACTUATOR_OUTPUT_FUNCTION_SERVO1 = 33,
91    #[doc = "Servo 2"]
92    ACTUATOR_OUTPUT_FUNCTION_SERVO2 = 34,
93    #[doc = "Servo 3"]
94    ACTUATOR_OUTPUT_FUNCTION_SERVO3 = 35,
95    #[doc = "Servo 4"]
96    ACTUATOR_OUTPUT_FUNCTION_SERVO4 = 36,
97    #[doc = "Servo 5"]
98    ACTUATOR_OUTPUT_FUNCTION_SERVO5 = 37,
99    #[doc = "Servo 6"]
100    ACTUATOR_OUTPUT_FUNCTION_SERVO6 = 38,
101    #[doc = "Servo 7"]
102    ACTUATOR_OUTPUT_FUNCTION_SERVO7 = 39,
103    #[doc = "Servo 8"]
104    ACTUATOR_OUTPUT_FUNCTION_SERVO8 = 40,
105    #[doc = "Servo 9"]
106    ACTUATOR_OUTPUT_FUNCTION_SERVO9 = 41,
107    #[doc = "Servo 10"]
108    ACTUATOR_OUTPUT_FUNCTION_SERVO10 = 42,
109    #[doc = "Servo 11"]
110    ACTUATOR_OUTPUT_FUNCTION_SERVO11 = 43,
111    #[doc = "Servo 12"]
112    ACTUATOR_OUTPUT_FUNCTION_SERVO12 = 44,
113    #[doc = "Servo 13"]
114    ACTUATOR_OUTPUT_FUNCTION_SERVO13 = 45,
115    #[doc = "Servo 14"]
116    ACTUATOR_OUTPUT_FUNCTION_SERVO14 = 46,
117    #[doc = "Servo 15"]
118    ACTUATOR_OUTPUT_FUNCTION_SERVO15 = 47,
119    #[doc = "Servo 16"]
120    ACTUATOR_OUTPUT_FUNCTION_SERVO16 = 48,
121}
122impl ActuatorOutputFunction {
123    pub const DEFAULT: Self = Self::ACTUATOR_OUTPUT_FUNCTION_NONE;
124}
125impl Default for ActuatorOutputFunction {
126    fn default() -> Self {
127        Self::DEFAULT
128    }
129}
130#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
131#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
132#[cfg_attr(feature = "serde", serde(tag = "type"))]
133#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
134#[repr(u32)]
135#[doc = "Enumeration of the ADSB altimeter types"]
136pub enum AdsbAltitudeType {
137    #[doc = "Altitude reported from a Baro source using QNH reference"]
138    ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0,
139    #[doc = "Altitude reported from a GNSS source"]
140    ADSB_ALTITUDE_TYPE_GEOMETRIC = 1,
141}
142impl AdsbAltitudeType {
143    pub const DEFAULT: Self = Self::ADSB_ALTITUDE_TYPE_PRESSURE_QNH;
144}
145impl Default for AdsbAltitudeType {
146    fn default() -> Self {
147        Self::DEFAULT
148    }
149}
150#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
151#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
152#[cfg_attr(feature = "serde", serde(tag = "type"))]
153#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
154#[repr(u32)]
155#[doc = "ADSB classification for the type of vehicle emitting the transponder signal"]
156pub enum AdsbEmitterType {
157    ADSB_EMITTER_TYPE_NO_INFO = 0,
158    ADSB_EMITTER_TYPE_LIGHT = 1,
159    ADSB_EMITTER_TYPE_SMALL = 2,
160    ADSB_EMITTER_TYPE_LARGE = 3,
161    ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4,
162    ADSB_EMITTER_TYPE_HEAVY = 5,
163    ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6,
164    ADSB_EMITTER_TYPE_ROTOCRAFT = 7,
165    ADSB_EMITTER_TYPE_UNASSIGNED = 8,
166    ADSB_EMITTER_TYPE_GLIDER = 9,
167    ADSB_EMITTER_TYPE_LIGHTER_AIR = 10,
168    ADSB_EMITTER_TYPE_PARACHUTE = 11,
169    ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12,
170    ADSB_EMITTER_TYPE_UNASSIGNED2 = 13,
171    ADSB_EMITTER_TYPE_UAV = 14,
172    ADSB_EMITTER_TYPE_SPACE = 15,
173    ADSB_EMITTER_TYPE_UNASSGINED3 = 16,
174    ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17,
175    ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18,
176    ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19,
177}
178impl AdsbEmitterType {
179    pub const DEFAULT: Self = Self::ADSB_EMITTER_TYPE_NO_INFO;
180}
181impl Default for AdsbEmitterType {
182    fn default() -> Self {
183        Self::DEFAULT
184    }
185}
186bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "These flags indicate status such as data validity of each data source. Set = data valid"] pub struct AdsbFlags : u16 { const ADSB_FLAGS_VALID_COORDS = 1 ; const ADSB_FLAGS_VALID_ALTITUDE = 2 ; const ADSB_FLAGS_VALID_HEADING = 4 ; const ADSB_FLAGS_VALID_VELOCITY = 8 ; const ADSB_FLAGS_VALID_CALLSIGN = 16 ; const ADSB_FLAGS_VALID_SQUAWK = 32 ; const ADSB_FLAGS_SIMULATED = 64 ; const ADSB_FLAGS_VERTICAL_VELOCITY_VALID = 128 ; const ADSB_FLAGS_BARO_VALID = 256 ; const ADSB_FLAGS_SOURCE_UAT = 32768 ; } }
187impl AdsbFlags {
188    pub const DEFAULT: Self = Self::ADSB_FLAGS_VALID_COORDS;
189}
190impl Default for AdsbFlags {
191    fn default() -> Self {
192        Self::DEFAULT
193    }
194}
195bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "These flags are used in the AIS_VESSEL.fields bitmask to indicate validity of data in the other message fields. When set, the data is valid."] pub struct AisFlags : u16 { # [doc = "1 = Position accuracy less than 10m, 0 = position accuracy greater than 10m."] const AIS_FLAGS_POSITION_ACCURACY = 1 ; const AIS_FLAGS_VALID_COG = 2 ; const AIS_FLAGS_VALID_VELOCITY = 4 ; # [doc = "1 = Velocity over 52.5765m/s (102.2 knots)"] const AIS_FLAGS_HIGH_VELOCITY = 8 ; const AIS_FLAGS_VALID_TURN_RATE = 16 ; # [doc = "Only the sign of the returned turn rate value is valid, either greater than 5deg/30s or less than -5deg/30s"] const AIS_FLAGS_TURN_RATE_SIGN_ONLY = 32 ; const AIS_FLAGS_VALID_DIMENSIONS = 64 ; # [doc = "Distance to bow is larger than 511m"] const AIS_FLAGS_LARGE_BOW_DIMENSION = 128 ; # [doc = "Distance to stern is larger than 511m"] const AIS_FLAGS_LARGE_STERN_DIMENSION = 256 ; # [doc = "Distance to port side is larger than 63m"] const AIS_FLAGS_LARGE_PORT_DIMENSION = 512 ; # [doc = "Distance to starboard side is larger than 63m"] const AIS_FLAGS_LARGE_STARBOARD_DIMENSION = 1024 ; const AIS_FLAGS_VALID_CALLSIGN = 2048 ; const AIS_FLAGS_VALID_NAME = 4096 ; } }
196impl AisFlags {
197    pub const DEFAULT: Self = Self::AIS_FLAGS_POSITION_ACCURACY;
198}
199impl Default for AisFlags {
200    fn default() -> Self {
201        Self::DEFAULT
202    }
203}
204#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
205#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
206#[cfg_attr(feature = "serde", serde(tag = "type"))]
207#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
208#[repr(u32)]
209#[doc = "Navigational status of AIS vessel, enum duplicated from AIS standard, <https://gpsd.gitlab.io/gpsd/AIVDM.html>"]
210pub enum AisNavStatus {
211    #[doc = "Under way using engine."]
212    UNDER_WAY = 0,
213    AIS_NAV_ANCHORED = 1,
214    AIS_NAV_UN_COMMANDED = 2,
215    AIS_NAV_RESTRICTED_MANOEUVERABILITY = 3,
216    AIS_NAV_DRAUGHT_CONSTRAINED = 4,
217    AIS_NAV_MOORED = 5,
218    AIS_NAV_AGROUND = 6,
219    AIS_NAV_FISHING = 7,
220    AIS_NAV_SAILING = 8,
221    AIS_NAV_RESERVED_HSC = 9,
222    AIS_NAV_RESERVED_WIG = 10,
223    AIS_NAV_RESERVED_1 = 11,
224    AIS_NAV_RESERVED_2 = 12,
225    AIS_NAV_RESERVED_3 = 13,
226    #[doc = "Search And Rescue Transponder."]
227    AIS_NAV_AIS_SART = 14,
228    #[doc = "Not available (default)."]
229    AIS_NAV_UNKNOWN = 15,
230}
231impl AisNavStatus {
232    pub const DEFAULT: Self = Self::UNDER_WAY;
233}
234impl Default for AisNavStatus {
235    fn default() -> Self {
236        Self::DEFAULT
237    }
238}
239#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
240#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
241#[cfg_attr(feature = "serde", serde(tag = "type"))]
242#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
243#[repr(u32)]
244#[doc = "Type of AIS vessel, enum duplicated from AIS standard, <https://gpsd.gitlab.io/gpsd/AIVDM.html>"]
245pub enum AisType {
246    #[doc = "Not available (default)."]
247    AIS_TYPE_UNKNOWN = 0,
248    AIS_TYPE_RESERVED_1 = 1,
249    AIS_TYPE_RESERVED_2 = 2,
250    AIS_TYPE_RESERVED_3 = 3,
251    AIS_TYPE_RESERVED_4 = 4,
252    AIS_TYPE_RESERVED_5 = 5,
253    AIS_TYPE_RESERVED_6 = 6,
254    AIS_TYPE_RESERVED_7 = 7,
255    AIS_TYPE_RESERVED_8 = 8,
256    AIS_TYPE_RESERVED_9 = 9,
257    AIS_TYPE_RESERVED_10 = 10,
258    AIS_TYPE_RESERVED_11 = 11,
259    AIS_TYPE_RESERVED_12 = 12,
260    AIS_TYPE_RESERVED_13 = 13,
261    AIS_TYPE_RESERVED_14 = 14,
262    AIS_TYPE_RESERVED_15 = 15,
263    AIS_TYPE_RESERVED_16 = 16,
264    AIS_TYPE_RESERVED_17 = 17,
265    AIS_TYPE_RESERVED_18 = 18,
266    AIS_TYPE_RESERVED_19 = 19,
267    #[doc = "Wing In Ground effect."]
268    AIS_TYPE_WIG = 20,
269    AIS_TYPE_WIG_HAZARDOUS_A = 21,
270    AIS_TYPE_WIG_HAZARDOUS_B = 22,
271    AIS_TYPE_WIG_HAZARDOUS_C = 23,
272    AIS_TYPE_WIG_HAZARDOUS_D = 24,
273    AIS_TYPE_WIG_RESERVED_1 = 25,
274    AIS_TYPE_WIG_RESERVED_2 = 26,
275    AIS_TYPE_WIG_RESERVED_3 = 27,
276    AIS_TYPE_WIG_RESERVED_4 = 28,
277    AIS_TYPE_WIG_RESERVED_5 = 29,
278    AIS_TYPE_FISHING = 30,
279    AIS_TYPE_TOWING = 31,
280    #[doc = "Towing: length exceeds 200m or breadth exceeds 25m."]
281    AIS_TYPE_TOWING_LARGE = 32,
282    #[doc = "Dredging or other underwater ops."]
283    AIS_TYPE_DREDGING = 33,
284    AIS_TYPE_DIVING = 34,
285    AIS_TYPE_MILITARY = 35,
286    AIS_TYPE_SAILING = 36,
287    AIS_TYPE_PLEASURE = 37,
288    AIS_TYPE_RESERVED_20 = 38,
289    AIS_TYPE_RESERVED_21 = 39,
290    #[doc = "High Speed Craft."]
291    AIS_TYPE_HSC = 40,
292    AIS_TYPE_HSC_HAZARDOUS_A = 41,
293    AIS_TYPE_HSC_HAZARDOUS_B = 42,
294    AIS_TYPE_HSC_HAZARDOUS_C = 43,
295    AIS_TYPE_HSC_HAZARDOUS_D = 44,
296    AIS_TYPE_HSC_RESERVED_1 = 45,
297    AIS_TYPE_HSC_RESERVED_2 = 46,
298    AIS_TYPE_HSC_RESERVED_3 = 47,
299    AIS_TYPE_HSC_RESERVED_4 = 48,
300    AIS_TYPE_HSC_UNKNOWN = 49,
301    AIS_TYPE_PILOT = 50,
302    #[doc = "Search And Rescue vessel."]
303    AIS_TYPE_SAR = 51,
304    AIS_TYPE_TUG = 52,
305    AIS_TYPE_PORT_TENDER = 53,
306    #[doc = "Anti-pollution equipment."]
307    AIS_TYPE_ANTI_POLLUTION = 54,
308    AIS_TYPE_LAW_ENFORCEMENT = 55,
309    AIS_TYPE_SPARE_LOCAL_1 = 56,
310    AIS_TYPE_SPARE_LOCAL_2 = 57,
311    AIS_TYPE_MEDICAL_TRANSPORT = 58,
312    #[doc = "Noncombatant ship according to RR Resolution No. 18."]
313    AIS_TYPE_NONECOMBATANT = 59,
314    AIS_TYPE_PASSENGER = 60,
315    AIS_TYPE_PASSENGER_HAZARDOUS_A = 61,
316    AIS_TYPE_PASSENGER_HAZARDOUS_B = 62,
317    AIS_TYPE_PASSENGER_HAZARDOUS_C = 63,
318    AIS_TYPE_PASSENGER_HAZARDOUS_D = 64,
319    AIS_TYPE_PASSENGER_RESERVED_1 = 65,
320    AIS_TYPE_PASSENGER_RESERVED_2 = 66,
321    AIS_TYPE_PASSENGER_RESERVED_3 = 67,
322    AIS_TYPE_PASSENGER_RESERVED_4 = 68,
323    AIS_TYPE_PASSENGER_UNKNOWN = 69,
324    AIS_TYPE_CARGO = 70,
325    AIS_TYPE_CARGO_HAZARDOUS_A = 71,
326    AIS_TYPE_CARGO_HAZARDOUS_B = 72,
327    AIS_TYPE_CARGO_HAZARDOUS_C = 73,
328    AIS_TYPE_CARGO_HAZARDOUS_D = 74,
329    AIS_TYPE_CARGO_RESERVED_1 = 75,
330    AIS_TYPE_CARGO_RESERVED_2 = 76,
331    AIS_TYPE_CARGO_RESERVED_3 = 77,
332    AIS_TYPE_CARGO_RESERVED_4 = 78,
333    AIS_TYPE_CARGO_UNKNOWN = 79,
334    AIS_TYPE_TANKER = 80,
335    AIS_TYPE_TANKER_HAZARDOUS_A = 81,
336    AIS_TYPE_TANKER_HAZARDOUS_B = 82,
337    AIS_TYPE_TANKER_HAZARDOUS_C = 83,
338    AIS_TYPE_TANKER_HAZARDOUS_D = 84,
339    AIS_TYPE_TANKER_RESERVED_1 = 85,
340    AIS_TYPE_TANKER_RESERVED_2 = 86,
341    AIS_TYPE_TANKER_RESERVED_3 = 87,
342    AIS_TYPE_TANKER_RESERVED_4 = 88,
343    AIS_TYPE_TANKER_UNKNOWN = 89,
344    AIS_TYPE_OTHER = 90,
345    AIS_TYPE_OTHER_HAZARDOUS_A = 91,
346    AIS_TYPE_OTHER_HAZARDOUS_B = 92,
347    AIS_TYPE_OTHER_HAZARDOUS_C = 93,
348    AIS_TYPE_OTHER_HAZARDOUS_D = 94,
349    AIS_TYPE_OTHER_RESERVED_1 = 95,
350    AIS_TYPE_OTHER_RESERVED_2 = 96,
351    AIS_TYPE_OTHER_RESERVED_3 = 97,
352    AIS_TYPE_OTHER_RESERVED_4 = 98,
353    AIS_TYPE_OTHER_UNKNOWN = 99,
354}
355impl AisType {
356    pub const DEFAULT: Self = Self::AIS_TYPE_UNKNOWN;
357}
358impl Default for AisType {
359    fn default() -> Self {
360        Self::DEFAULT
361    }
362}
363bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Bitmap to indicate which dimensions should be ignored by the vehicle: a value of 0b00000000 indicates that none of the setpoint dimensions should be ignored."] pub struct AttitudeTargetTypemask : u8 { # [doc = "Ignore body roll rate"] const ATTITUDE_TARGET_TYPEMASK_BODY_ROLL_RATE_IGNORE = 1 ; # [doc = "Ignore body pitch rate"] const ATTITUDE_TARGET_TYPEMASK_BODY_PITCH_RATE_IGNORE = 2 ; # [doc = "Ignore body yaw rate"] const ATTITUDE_TARGET_TYPEMASK_BODY_YAW_RATE_IGNORE = 4 ; # [doc = "Use 3D body thrust setpoint instead of throttle"] const ATTITUDE_TARGET_TYPEMASK_THRUST_BODY_SET = 32 ; # [doc = "Ignore throttle"] const ATTITUDE_TARGET_TYPEMASK_THROTTLE_IGNORE = 64 ; # [doc = "Ignore attitude"] const ATTITUDE_TARGET_TYPEMASK_ATTITUDE_IGNORE = 128 ; } }
364impl AttitudeTargetTypemask {
365    pub const DEFAULT: Self = Self::ATTITUDE_TARGET_TYPEMASK_BODY_ROLL_RATE_IGNORE;
366}
367impl Default for AttitudeTargetTypemask {
368    fn default() -> Self {
369        Self::DEFAULT
370    }
371}
372#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
373#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
374#[cfg_attr(feature = "serde", serde(tag = "type"))]
375#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
376#[repr(u32)]
377#[doc = "Axes that will be autotuned by MAV_CMD_DO_AUTOTUNE_ENABLE.         Note that at least one flag must be set in MAV_CMD_DO_AUTOTUNE_ENABLE.param2: if none are set, the flight stack will tune its default set of axes."]
378pub enum AutotuneAxis {
379    #[doc = "Autotune roll axis."]
380    AUTOTUNE_AXIS_ROLL = 1,
381    #[doc = "Autotune pitch axis."]
382    AUTOTUNE_AXIS_PITCH = 2,
383    #[doc = "Autotune yaw axis."]
384    AUTOTUNE_AXIS_YAW = 4,
385}
386impl AutotuneAxis {
387    pub const DEFAULT: Self = Self::AUTOTUNE_AXIS_ROLL;
388}
389impl Default for AutotuneAxis {
390    fn default() -> Self {
391        Self::DEFAULT
392    }
393}
394bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Camera capability flags (Bitmap)"] pub struct CameraCapFlags : u32 { # [doc = "Camera is able to record video"] const CAMERA_CAP_FLAGS_CAPTURE_VIDEO = 1 ; # [doc = "Camera is able to capture images"] const CAMERA_CAP_FLAGS_CAPTURE_IMAGE = 2 ; # [doc = "Camera has separate Video and Image/Photo modes (MAV_CMD_SET_CAMERA_MODE)"] const CAMERA_CAP_FLAGS_HAS_MODES = 4 ; # [doc = "Camera can capture images while in video mode"] const CAMERA_CAP_FLAGS_CAN_CAPTURE_IMAGE_IN_VIDEO_MODE = 8 ; # [doc = "Camera can capture videos while in Photo/Image mode"] const CAMERA_CAP_FLAGS_CAN_CAPTURE_VIDEO_IN_IMAGE_MODE = 16 ; # [doc = "Camera has image survey mode (MAV_CMD_SET_CAMERA_MODE)"] const CAMERA_CAP_FLAGS_HAS_IMAGE_SURVEY_MODE = 32 ; # [doc = "Camera has basic zoom control (MAV_CMD_SET_CAMERA_ZOOM)"] const CAMERA_CAP_FLAGS_HAS_BASIC_ZOOM = 64 ; # [doc = "Camera has basic focus control (MAV_CMD_SET_CAMERA_FOCUS)"] const CAMERA_CAP_FLAGS_HAS_BASIC_FOCUS = 128 ; # [doc = "Camera has video streaming capabilities (request VIDEO_STREAM_INFORMATION with MAV_CMD_REQUEST_MESSAGE for video streaming info)"] const CAMERA_CAP_FLAGS_HAS_VIDEO_STREAM = 256 ; # [doc = "Camera supports tracking of a point on the camera view."] const CAMERA_CAP_FLAGS_HAS_TRACKING_POINT = 512 ; # [doc = "Camera supports tracking of a selection rectangle on the camera view."] const CAMERA_CAP_FLAGS_HAS_TRACKING_RECTANGLE = 1024 ; # [doc = "Camera supports tracking geo status (CAMERA_TRACKING_GEO_STATUS)."] const CAMERA_CAP_FLAGS_HAS_TRACKING_GEO_STATUS = 2048 ; # [doc = "Camera supports absolute thermal range (request CAMERA_THERMAL_RANGE with MAV_CMD_REQUEST_MESSAGE)."] const CAMERA_CAP_FLAGS_HAS_THERMAL_RANGE = 4096 ; } }
395impl CameraCapFlags {
396    pub const DEFAULT: Self = Self::CAMERA_CAP_FLAGS_CAPTURE_VIDEO;
397}
398impl Default for CameraCapFlags {
399    fn default() -> Self {
400        Self::DEFAULT
401    }
402}
403#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
404#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
405#[cfg_attr(feature = "serde", serde(tag = "type"))]
406#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
407#[repr(u32)]
408#[doc = "Camera Modes."]
409pub enum CameraMode {
410    #[doc = "Camera is in image/photo capture mode."]
411    CAMERA_MODE_IMAGE = 0,
412    #[doc = "Camera is in video capture mode."]
413    CAMERA_MODE_VIDEO = 1,
414    #[doc = "Camera is in image survey capture mode. It allows for camera controller to do specific settings for surveys."]
415    CAMERA_MODE_IMAGE_SURVEY = 2,
416}
417impl CameraMode {
418    pub const DEFAULT: Self = Self::CAMERA_MODE_IMAGE;
419}
420impl Default for CameraMode {
421    fn default() -> Self {
422        Self::DEFAULT
423    }
424}
425#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
426#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
427#[cfg_attr(feature = "serde", serde(tag = "type"))]
428#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
429#[repr(u32)]
430#[doc = "Camera sources for MAV_CMD_SET_CAMERA_SOURCE"]
431pub enum CameraSource {
432    #[doc = "Default camera source."]
433    CAMERA_SOURCE_DEFAULT = 0,
434    #[doc = "RGB camera source."]
435    CAMERA_SOURCE_RGB = 1,
436    #[doc = "IR camera source."]
437    CAMERA_SOURCE_IR = 2,
438    #[doc = "NDVI camera source."]
439    CAMERA_SOURCE_NDVI = 3,
440}
441impl CameraSource {
442    pub const DEFAULT: Self = Self::CAMERA_SOURCE_DEFAULT;
443}
444impl Default for CameraSource {
445    fn default() -> Self {
446        Self::DEFAULT
447    }
448}
449#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
450#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
451#[cfg_attr(feature = "serde", serde(tag = "type"))]
452#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
453#[repr(u32)]
454#[doc = "Camera tracking modes"]
455pub enum CameraTrackingMode {
456    #[doc = "Not tracking"]
457    CAMERA_TRACKING_MODE_NONE = 0,
458    #[doc = "Target is a point"]
459    CAMERA_TRACKING_MODE_POINT = 1,
460    #[doc = "Target is a rectangle"]
461    CAMERA_TRACKING_MODE_RECTANGLE = 2,
462}
463impl CameraTrackingMode {
464    pub const DEFAULT: Self = Self::CAMERA_TRACKING_MODE_NONE;
465}
466impl Default for CameraTrackingMode {
467    fn default() -> Self {
468        Self::DEFAULT
469    }
470}
471#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
472#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
473#[cfg_attr(feature = "serde", serde(tag = "type"))]
474#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
475#[repr(u32)]
476#[doc = "Camera tracking status flags"]
477pub enum CameraTrackingStatusFlags {
478    #[doc = "Camera is not tracking"]
479    CAMERA_TRACKING_STATUS_FLAGS_IDLE = 0,
480    #[doc = "Camera is tracking"]
481    CAMERA_TRACKING_STATUS_FLAGS_ACTIVE = 1,
482    #[doc = "Camera tracking in error state"]
483    CAMERA_TRACKING_STATUS_FLAGS_ERROR = 2,
484}
485impl CameraTrackingStatusFlags {
486    pub const DEFAULT: Self = Self::CAMERA_TRACKING_STATUS_FLAGS_IDLE;
487}
488impl Default for CameraTrackingStatusFlags {
489    fn default() -> Self {
490        Self::DEFAULT
491    }
492}
493bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Camera tracking target data (shows where tracked target is within image)"] pub struct CameraTrackingTargetData : u8 { # [doc = "Target data embedded in image data (proprietary)"] const CAMERA_TRACKING_TARGET_DATA_EMBEDDED = 1 ; # [doc = "Target data rendered in image"] const CAMERA_TRACKING_TARGET_DATA_RENDERED = 2 ; # [doc = "Target data within status message (Point or Rectangle)"] const CAMERA_TRACKING_TARGET_DATA_IN_STATUS = 4 ; } }
494impl CameraTrackingTargetData {
495    pub const DEFAULT: Self = Self::CAMERA_TRACKING_TARGET_DATA_EMBEDDED;
496}
497impl Default for CameraTrackingTargetData {
498    fn default() -> Self {
499        Self::DEFAULT
500    }
501}
502#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
503#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
504#[cfg_attr(feature = "serde", serde(tag = "type"))]
505#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
506#[repr(u32)]
507#[doc = "Zoom types for MAV_CMD_SET_CAMERA_ZOOM"]
508pub enum CameraZoomType {
509    #[doc = "Zoom one step increment (-1 for wide, 1 for tele)"]
510    ZOOM_TYPE_STEP = 0,
511    #[doc = "Continuous normalized zoom in/out rate until stopped. Range -1..1, negative: wide, positive: narrow/tele, 0 to stop zooming. Other values should be clipped to the range."]
512    ZOOM_TYPE_CONTINUOUS = 1,
513    #[doc = "Zoom value as proportion of full camera range (a percentage value between 0.0 and 100.0)"]
514    ZOOM_TYPE_RANGE = 2,
515    #[doc = "Zoom value/variable focal length in millimetres. Note that there is no message to get the valid zoom range of the camera, so this can type can only be used for cameras where the zoom range is known (implying that this cannot reliably be used in a GCS for an arbitrary camera)"]
516    ZOOM_TYPE_FOCAL_LENGTH = 3,
517    #[doc = "Zoom value as horizontal field of view in degrees."]
518    ZOOM_TYPE_HORIZONTAL_FOV = 4,
519}
520impl CameraZoomType {
521    pub const DEFAULT: Self = Self::ZOOM_TYPE_STEP;
522}
523impl Default for CameraZoomType {
524    fn default() -> Self {
525        Self::DEFAULT
526    }
527}
528#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
529#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
530#[cfg_attr(feature = "serde", serde(tag = "type"))]
531#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
532#[repr(u32)]
533pub enum CanFilterOp {
534    CAN_FILTER_REPLACE = 0,
535    CAN_FILTER_ADD = 1,
536    CAN_FILTER_REMOVE = 2,
537}
538impl CanFilterOp {
539    pub const DEFAULT: Self = Self::CAN_FILTER_REPLACE;
540}
541impl Default for CanFilterOp {
542    fn default() -> Self {
543        Self::DEFAULT
544    }
545}
546#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
547#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
548#[cfg_attr(feature = "serde", serde(tag = "type"))]
549#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
550#[repr(u32)]
551#[doc = "Possible responses from a CELLULAR_CONFIG message."]
552pub enum CellularConfigResponse {
553    #[doc = "Changes accepted."]
554    CELLULAR_CONFIG_RESPONSE_ACCEPTED = 0,
555    #[doc = "Invalid APN."]
556    CELLULAR_CONFIG_RESPONSE_APN_ERROR = 1,
557    #[doc = "Invalid PIN."]
558    CELLULAR_CONFIG_RESPONSE_PIN_ERROR = 2,
559    #[doc = "Changes rejected."]
560    CELLULAR_CONFIG_RESPONSE_REJECTED = 3,
561    #[doc = "PUK is required to unblock SIM card."]
562    CELLULAR_CONFIG_BLOCKED_PUK_REQUIRED = 4,
563}
564impl CellularConfigResponse {
565    pub const DEFAULT: Self = Self::CELLULAR_CONFIG_RESPONSE_ACCEPTED;
566}
567impl Default for CellularConfigResponse {
568    fn default() -> Self {
569        Self::DEFAULT
570    }
571}
572#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
573#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
574#[cfg_attr(feature = "serde", serde(tag = "type"))]
575#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
576#[repr(u32)]
577#[doc = "These flags are used to diagnose the failure state of CELLULAR_STATUS"]
578pub enum CellularNetworkFailedReason {
579    #[doc = "No error"]
580    CELLULAR_NETWORK_FAILED_REASON_NONE = 0,
581    #[doc = "Error state is unknown"]
582    CELLULAR_NETWORK_FAILED_REASON_UNKNOWN = 1,
583    #[doc = "SIM is required for the modem but missing"]
584    CELLULAR_NETWORK_FAILED_REASON_SIM_MISSING = 2,
585    #[doc = "SIM is available, but not usable for connection"]
586    CELLULAR_NETWORK_FAILED_REASON_SIM_ERROR = 3,
587}
588impl CellularNetworkFailedReason {
589    pub const DEFAULT: Self = Self::CELLULAR_NETWORK_FAILED_REASON_NONE;
590}
591impl Default for CellularNetworkFailedReason {
592    fn default() -> Self {
593        Self::DEFAULT
594    }
595}
596#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
597#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
598#[cfg_attr(feature = "serde", serde(tag = "type"))]
599#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
600#[repr(u32)]
601#[doc = "Cellular network radio type"]
602pub enum CellularNetworkRadioType {
603    CELLULAR_NETWORK_RADIO_TYPE_NONE = 0,
604    CELLULAR_NETWORK_RADIO_TYPE_GSM = 1,
605    CELLULAR_NETWORK_RADIO_TYPE_CDMA = 2,
606    CELLULAR_NETWORK_RADIO_TYPE_WCDMA = 3,
607    CELLULAR_NETWORK_RADIO_TYPE_LTE = 4,
608}
609impl CellularNetworkRadioType {
610    pub const DEFAULT: Self = Self::CELLULAR_NETWORK_RADIO_TYPE_NONE;
611}
612impl Default for CellularNetworkRadioType {
613    fn default() -> Self {
614        Self::DEFAULT
615    }
616}
617#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
618#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
619#[cfg_attr(feature = "serde", serde(tag = "type"))]
620#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
621#[repr(u32)]
622#[doc = "These flags encode the cellular network status"]
623pub enum CellularStatusFlag {
624    #[doc = "State unknown or not reportable."]
625    CELLULAR_STATUS_FLAG_UNKNOWN = 0,
626    #[doc = "Modem is unusable"]
627    CELLULAR_STATUS_FLAG_FAILED = 1,
628    #[doc = "Modem is being initialized"]
629    CELLULAR_STATUS_FLAG_INITIALIZING = 2,
630    #[doc = "Modem is locked"]
631    CELLULAR_STATUS_FLAG_LOCKED = 3,
632    #[doc = "Modem is not enabled and is powered down"]
633    CELLULAR_STATUS_FLAG_DISABLED = 4,
634    #[doc = "Modem is currently transitioning to the CELLULAR_STATUS_FLAG_DISABLED state"]
635    CELLULAR_STATUS_FLAG_DISABLING = 5,
636    #[doc = "Modem is currently transitioning to the CELLULAR_STATUS_FLAG_ENABLED state"]
637    CELLULAR_STATUS_FLAG_ENABLING = 6,
638    #[doc = "Modem is enabled and powered on but not registered with a network provider and not available for data connections"]
639    CELLULAR_STATUS_FLAG_ENABLED = 7,
640    #[doc = "Modem is searching for a network provider to register"]
641    CELLULAR_STATUS_FLAG_SEARCHING = 8,
642    #[doc = "Modem is registered with a network provider, and data connections and messaging may be available for use"]
643    CELLULAR_STATUS_FLAG_REGISTERED = 9,
644    #[doc = "Modem is disconnecting and deactivating the last active packet data bearer. This state will not be entered if more than one packet data bearer is active and one of the active bearers is deactivated"]
645    CELLULAR_STATUS_FLAG_DISCONNECTING = 10,
646    #[doc = "Modem is activating and connecting the first packet data bearer. Subsequent bearer activations when another bearer is already active do not cause this state to be entered"]
647    CELLULAR_STATUS_FLAG_CONNECTING = 11,
648    #[doc = "One or more packet data bearers is active and connected"]
649    CELLULAR_STATUS_FLAG_CONNECTED = 12,
650}
651impl CellularStatusFlag {
652    pub const DEFAULT: Self = Self::CELLULAR_STATUS_FLAG_UNKNOWN;
653}
654impl Default for CellularStatusFlag {
655    fn default() -> Self {
656        Self::DEFAULT
657    }
658}
659#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
660#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
661#[cfg_attr(feature = "serde", serde(tag = "type"))]
662#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
663#[repr(u32)]
664#[doc = "Supported component metadata types. These are used in the \"general\" metadata file returned by COMPONENT_METADATA to provide information about supported metadata types. The types are not used directly in MAVLink messages."]
665pub enum CompMetadataType {
666    #[doc = "General information about the component. General metadata includes information about other metadata types supported by the component. Files of this type must be supported, and must be downloadable from vehicle using a MAVLink FTP URI."]
667    COMP_METADATA_TYPE_GENERAL = 0,
668    #[doc = "Parameter meta data."]
669    COMP_METADATA_TYPE_PARAMETER = 1,
670    #[doc = "Meta data that specifies which commands and command parameters the vehicle supports. (WIP)"]
671    COMP_METADATA_TYPE_COMMANDS = 2,
672    #[doc = "Meta data that specifies external non-MAVLink peripherals."]
673    COMP_METADATA_TYPE_PERIPHERALS = 3,
674    #[doc = "Meta data for the events interface."]
675    COMP_METADATA_TYPE_EVENTS = 4,
676    #[doc = "Meta data for actuator configuration (motors, servos and vehicle geometry) and testing."]
677    COMP_METADATA_TYPE_ACTUATORS = 5,
678}
679impl CompMetadataType {
680    pub const DEFAULT: Self = Self::COMP_METADATA_TYPE_GENERAL;
681}
682impl Default for CompMetadataType {
683    fn default() -> Self {
684        Self::DEFAULT
685    }
686}
687#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
688#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
689#[cfg_attr(feature = "serde", serde(tag = "type"))]
690#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
691#[repr(u32)]
692#[doc = "Indicates the ESC connection type."]
693pub enum EscConnectionType {
694    #[doc = "Traditional PPM ESC."]
695    ESC_CONNECTION_TYPE_PPM = 0,
696    #[doc = "Serial Bus connected ESC."]
697    ESC_CONNECTION_TYPE_SERIAL = 1,
698    #[doc = "One Shot PPM ESC."]
699    ESC_CONNECTION_TYPE_ONESHOT = 2,
700    #[doc = "I2C ESC."]
701    ESC_CONNECTION_TYPE_I2C = 3,
702    #[doc = "CAN-Bus ESC."]
703    ESC_CONNECTION_TYPE_CAN = 4,
704    #[doc = "DShot ESC."]
705    ESC_CONNECTION_TYPE_DSHOT = 5,
706}
707impl EscConnectionType {
708    pub const DEFAULT: Self = Self::ESC_CONNECTION_TYPE_PPM;
709}
710impl Default for EscConnectionType {
711    fn default() -> Self {
712        Self::DEFAULT
713    }
714}
715bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Flags to report ESC failures."] pub struct EscFailureFlags : u16 { # [doc = "Over current failure."] const ESC_FAILURE_OVER_CURRENT = 1 ; # [doc = "Over voltage failure."] const ESC_FAILURE_OVER_VOLTAGE = 2 ; # [doc = "Over temperature failure."] const ESC_FAILURE_OVER_TEMPERATURE = 4 ; # [doc = "Over RPM failure."] const ESC_FAILURE_OVER_RPM = 8 ; # [doc = "Inconsistent command failure i.e. out of bounds."] const ESC_FAILURE_INCONSISTENT_CMD = 16 ; # [doc = "Motor stuck failure."] const ESC_FAILURE_MOTOR_STUCK = 32 ; # [doc = "Generic ESC failure."] const ESC_FAILURE_GENERIC = 64 ; } }
716impl EscFailureFlags {
717    pub const DEFAULT: Self = Self::ESC_FAILURE_OVER_CURRENT;
718}
719impl Default for EscFailureFlags {
720    fn default() -> Self {
721        Self::DEFAULT
722    }
723}
724bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Flags in ESTIMATOR_STATUS message"] pub struct EstimatorStatusFlags : u16 { # [doc = "True if the attitude estimate is good"] const ESTIMATOR_ATTITUDE = 1 ; # [doc = "True if the horizontal velocity estimate is good"] const ESTIMATOR_VELOCITY_HORIZ = 2 ; # [doc = "True if the  vertical velocity estimate is good"] const ESTIMATOR_VELOCITY_VERT = 4 ; # [doc = "True if the horizontal position (relative) estimate is good"] const ESTIMATOR_POS_HORIZ_REL = 8 ; # [doc = "True if the horizontal position (absolute) estimate is good"] const ESTIMATOR_POS_HORIZ_ABS = 16 ; # [doc = "True if the vertical position (absolute) estimate is good"] const ESTIMATOR_POS_VERT_ABS = 32 ; # [doc = "True if the vertical position (above ground) estimate is good"] const ESTIMATOR_POS_VERT_AGL = 64 ; # [doc = "True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)"] const ESTIMATOR_CONST_POS_MODE = 128 ; # [doc = "True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate"] const ESTIMATOR_PRED_POS_HORIZ_REL = 256 ; # [doc = "True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate"] const ESTIMATOR_PRED_POS_HORIZ_ABS = 512 ; # [doc = "True if the EKF has detected a GPS glitch"] const ESTIMATOR_GPS_GLITCH = 1024 ; # [doc = "True if the EKF has detected bad accelerometer data"] const ESTIMATOR_ACCEL_ERROR = 2048 ; } }
725impl EstimatorStatusFlags {
726    pub const DEFAULT: Self = Self::ESTIMATOR_ATTITUDE;
727}
728impl Default for EstimatorStatusFlags {
729    fn default() -> Self {
730        Self::DEFAULT
731    }
732}
733#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
734#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
735#[cfg_attr(feature = "serde", serde(tag = "type"))]
736#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
737#[repr(u32)]
738#[doc = "List of possible failure type to inject."]
739pub enum FailureType {
740    #[doc = "No failure injected, used to reset a previous failure."]
741    FAILURE_TYPE_OK = 0,
742    #[doc = "Sets unit off, so completely non-responsive."]
743    FAILURE_TYPE_OFF = 1,
744    #[doc = "Unit is stuck e.g. keeps reporting the same value."]
745    FAILURE_TYPE_STUCK = 2,
746    #[doc = "Unit is reporting complete garbage."]
747    FAILURE_TYPE_GARBAGE = 3,
748    #[doc = "Unit is consistently wrong."]
749    FAILURE_TYPE_WRONG = 4,
750    #[doc = "Unit is slow, so e.g. reporting at slower than expected rate."]
751    FAILURE_TYPE_SLOW = 5,
752    #[doc = "Data of unit is delayed in time."]
753    FAILURE_TYPE_DELAYED = 6,
754    #[doc = "Unit is sometimes working, sometimes not."]
755    FAILURE_TYPE_INTERMITTENT = 7,
756}
757impl FailureType {
758    pub const DEFAULT: Self = Self::FAILURE_TYPE_OK;
759}
760impl Default for FailureType {
761    fn default() -> Self {
762        Self::DEFAULT
763    }
764}
765#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
766#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
767#[cfg_attr(feature = "serde", serde(tag = "type"))]
768#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
769#[repr(u32)]
770#[doc = "List of possible units where failures can be injected."]
771pub enum FailureUnit {
772    FAILURE_UNIT_SENSOR_GYRO = 0,
773    FAILURE_UNIT_SENSOR_ACCEL = 1,
774    FAILURE_UNIT_SENSOR_MAG = 2,
775    FAILURE_UNIT_SENSOR_BARO = 3,
776    FAILURE_UNIT_SENSOR_GPS = 4,
777    FAILURE_UNIT_SENSOR_OPTICAL_FLOW = 5,
778    FAILURE_UNIT_SENSOR_VIO = 6,
779    FAILURE_UNIT_SENSOR_DISTANCE_SENSOR = 7,
780    FAILURE_UNIT_SENSOR_AIRSPEED = 8,
781    FAILURE_UNIT_SYSTEM_BATTERY = 100,
782    FAILURE_UNIT_SYSTEM_MOTOR = 101,
783    FAILURE_UNIT_SYSTEM_SERVO = 102,
784    FAILURE_UNIT_SYSTEM_AVOIDANCE = 103,
785    FAILURE_UNIT_SYSTEM_RC_SIGNAL = 104,
786    FAILURE_UNIT_SYSTEM_MAVLINK_SIGNAL = 105,
787}
788impl FailureUnit {
789    pub const DEFAULT: Self = Self::FAILURE_UNIT_SENSOR_GYRO;
790}
791impl Default for FailureUnit {
792    fn default() -> Self {
793        Self::DEFAULT
794    }
795}
796#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
797#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
798#[cfg_attr(feature = "serde", serde(tag = "type"))]
799#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
800#[repr(u32)]
801pub enum FenceBreach {
802    #[doc = "No last fence breach"]
803    FENCE_BREACH_NONE = 0,
804    #[doc = "Breached minimum altitude"]
805    FENCE_BREACH_MINALT = 1,
806    #[doc = "Breached maximum altitude"]
807    FENCE_BREACH_MAXALT = 2,
808    #[doc = "Breached fence boundary"]
809    FENCE_BREACH_BOUNDARY = 3,
810}
811impl FenceBreach {
812    pub const DEFAULT: Self = Self::FENCE_BREACH_NONE;
813}
814impl Default for FenceBreach {
815    fn default() -> Self {
816        Self::DEFAULT
817    }
818}
819#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
820#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
821#[cfg_attr(feature = "serde", serde(tag = "type"))]
822#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
823#[repr(u32)]
824#[doc = "Actions being taken to mitigate/prevent fence breach"]
825pub enum FenceMitigate {
826    #[doc = "Unknown"]
827    FENCE_MITIGATE_UNKNOWN = 0,
828    #[doc = "No actions being taken"]
829    FENCE_MITIGATE_NONE = 1,
830    #[doc = "Velocity limiting active to prevent breach"]
831    FENCE_MITIGATE_VEL_LIMIT = 2,
832}
833impl FenceMitigate {
834    pub const DEFAULT: Self = Self::FENCE_MITIGATE_UNKNOWN;
835}
836impl Default for FenceMitigate {
837    fn default() -> Self {
838        Self::DEFAULT
839    }
840}
841#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
842#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
843#[cfg_attr(feature = "serde", serde(tag = "type"))]
844#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
845#[repr(u32)]
846#[doc = "Fence types to enable or disable when using MAV_CMD_DO_FENCE_ENABLE.         Note that at least one of these flags must be set in MAV_CMD_DO_FENCE_ENABLE.param2.         If none are set, the flight stack will ignore the field and enable/disable its default set of fences (usually all of them)."]
847pub enum FenceType {
848    #[doc = "Maximum altitude fence"]
849    FENCE_TYPE_ALT_MAX = 1,
850    #[doc = "Circle fence"]
851    FENCE_TYPE_CIRCLE = 2,
852    #[doc = "Polygon fence"]
853    FENCE_TYPE_POLYGON = 4,
854    #[doc = "Minimum altitude fence"]
855    FENCE_TYPE_ALT_MIN = 8,
856}
857impl FenceType {
858    pub const DEFAULT: Self = Self::FENCE_TYPE_ALT_MAX;
859}
860impl Default for FenceType {
861    fn default() -> Self {
862        Self::DEFAULT
863    }
864}
865#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
866#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
867#[cfg_attr(feature = "serde", serde(tag = "type"))]
868#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
869#[repr(u32)]
870#[doc = "These values define the type of firmware release.  These values indicate the first version or release of this type.  For example the first alpha release would be 64, the second would be 65."]
871pub enum FirmwareVersionType {
872    #[doc = "development release"]
873    FIRMWARE_VERSION_TYPE_DEV = 0,
874    #[doc = "alpha release"]
875    FIRMWARE_VERSION_TYPE_ALPHA = 64,
876    #[doc = "beta release"]
877    FIRMWARE_VERSION_TYPE_BETA = 128,
878    #[doc = "release candidate"]
879    FIRMWARE_VERSION_TYPE_RC = 192,
880    #[doc = "official stable release"]
881    FIRMWARE_VERSION_TYPE_OFFICIAL = 255,
882}
883impl FirmwareVersionType {
884    pub const DEFAULT: Self = Self::FIRMWARE_VERSION_TYPE_DEV;
885}
886impl Default for FirmwareVersionType {
887    fn default() -> Self {
888        Self::DEFAULT
889    }
890}
891bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Gimbal device (low level) capability flags (bitmap)."] pub struct GimbalDeviceCapFlags : u16 { # [doc = "Gimbal device supports a retracted position."] const GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT = 1 ; # [doc = "Gimbal device supports a horizontal, forward looking position, stabilized."] const GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL = 2 ; # [doc = "Gimbal device supports rotating around roll axis."] const GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS = 4 ; # [doc = "Gimbal device supports to follow a roll angle relative to the vehicle."] const GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW = 8 ; # [doc = "Gimbal device supports locking to a roll angle (generally that's the default with roll stabilized)."] const GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK = 16 ; # [doc = "Gimbal device supports rotating around pitch axis."] const GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS = 32 ; # [doc = "Gimbal device supports to follow a pitch angle relative to the vehicle."] const GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW = 64 ; # [doc = "Gimbal device supports locking to a pitch angle (generally that's the default with pitch stabilized)."] const GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK = 128 ; # [doc = "Gimbal device supports rotating around yaw axis."] const GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS = 256 ; # [doc = "Gimbal device supports to follow a yaw angle relative to the vehicle (generally that's the default)."] const GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW = 512 ; # [doc = "Gimbal device supports locking to an absolute heading, i.e., yaw angle relative to North (earth frame, often this is an option available)."] const GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK = 1024 ; # [doc = "Gimbal device supports yawing/panning infinitely (e.g. using slip disk)."] const GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW = 2048 ; # [doc = "Gimbal device supports yaw angles and angular velocities relative to North (earth frame). This usually requires support by an autopilot via AUTOPILOT_STATE_FOR_GIMBAL_DEVICE. Support can go on and off during runtime, which is reported by the flag GIMBAL_DEVICE_FLAGS_CAN_ACCEPT_YAW_IN_EARTH_FRAME."] const GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_YAW_IN_EARTH_FRAME = 4096 ; # [doc = "Gimbal device supports radio control inputs as an alternative input for controlling the gimbal orientation."] const GIMBAL_DEVICE_CAP_FLAGS_HAS_RC_INPUTS = 8192 ; } }
892impl GimbalDeviceCapFlags {
893    pub const DEFAULT: Self = Self::GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT;
894}
895impl Default for GimbalDeviceCapFlags {
896    fn default() -> Self {
897        Self::DEFAULT
898    }
899}
900bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Gimbal device (low level) error flags (bitmap, 0 means no error)"] pub struct GimbalDeviceErrorFlags : u32 { # [doc = "Gimbal device is limited by hardware roll limit."] const GIMBAL_DEVICE_ERROR_FLAGS_AT_ROLL_LIMIT = 1 ; # [doc = "Gimbal device is limited by hardware pitch limit."] const GIMBAL_DEVICE_ERROR_FLAGS_AT_PITCH_LIMIT = 2 ; # [doc = "Gimbal device is limited by hardware yaw limit."] const GIMBAL_DEVICE_ERROR_FLAGS_AT_YAW_LIMIT = 4 ; # [doc = "There is an error with the gimbal encoders."] const GIMBAL_DEVICE_ERROR_FLAGS_ENCODER_ERROR = 8 ; # [doc = "There is an error with the gimbal power source."] const GIMBAL_DEVICE_ERROR_FLAGS_POWER_ERROR = 16 ; # [doc = "There is an error with the gimbal motors."] const GIMBAL_DEVICE_ERROR_FLAGS_MOTOR_ERROR = 32 ; # [doc = "There is an error with the gimbal's software."] const GIMBAL_DEVICE_ERROR_FLAGS_SOFTWARE_ERROR = 64 ; # [doc = "There is an error with the gimbal's communication."] const GIMBAL_DEVICE_ERROR_FLAGS_COMMS_ERROR = 128 ; # [doc = "Gimbal device is currently calibrating."] const GIMBAL_DEVICE_ERROR_FLAGS_CALIBRATION_RUNNING = 256 ; # [doc = "Gimbal device is not assigned to a gimbal manager."] const GIMBAL_DEVICE_ERROR_FLAGS_NO_MANAGER = 512 ; } }
901impl GimbalDeviceErrorFlags {
902    pub const DEFAULT: Self = Self::GIMBAL_DEVICE_ERROR_FLAGS_AT_ROLL_LIMIT;
903}
904impl Default for GimbalDeviceErrorFlags {
905    fn default() -> Self {
906        Self::DEFAULT
907    }
908}
909bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Flags for gimbal device (lower level) operation."] pub struct GimbalDeviceFlags : u16 { # [doc = "Set to retracted safe position (no stabilization), takes precedence over all other flags."] const GIMBAL_DEVICE_FLAGS_RETRACT = 1 ; # [doc = "Set to neutral/default position, taking precedence over all other flags except RETRACT. Neutral is commonly forward-facing and horizontal (roll=pitch=yaw=0) but may be any orientation."] const GIMBAL_DEVICE_FLAGS_NEUTRAL = 2 ; # [doc = "Lock roll angle to absolute angle relative to horizon (not relative to vehicle). This is generally the default with a stabilizing gimbal."] const GIMBAL_DEVICE_FLAGS_ROLL_LOCK = 4 ; # [doc = "Lock pitch angle to absolute angle relative to horizon (not relative to vehicle). This is generally the default with a stabilizing gimbal."] const GIMBAL_DEVICE_FLAGS_PITCH_LOCK = 8 ; # [doc = "Lock yaw angle to absolute angle relative to North (not relative to vehicle). If this flag is set, the yaw angle and z component of angular velocity are relative to North (earth frame, x-axis pointing North), else they are relative to the vehicle heading (vehicle frame, earth frame rotated so that the x-axis is pointing forward)."] const GIMBAL_DEVICE_FLAGS_YAW_LOCK = 16 ; # [doc = "Yaw angle and z component of angular velocity are relative to the vehicle heading (vehicle frame, earth frame rotated such that the x-axis is pointing forward)."] const GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME = 32 ; # [doc = "Yaw angle and z component of angular velocity are relative to North (earth frame, x-axis is pointing North)."] const GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME = 64 ; # [doc = "Gimbal device can accept yaw angle inputs relative to North (earth frame). This flag is only for reporting (attempts to set this flag are ignored)."] const GIMBAL_DEVICE_FLAGS_ACCEPTS_YAW_IN_EARTH_FRAME = 128 ; # [doc = "The gimbal orientation is set exclusively by the RC signals feed to the gimbal's radio control inputs. MAVLink messages for setting the gimbal orientation (GIMBAL_DEVICE_SET_ATTITUDE) are ignored."] const GIMBAL_DEVICE_FLAGS_RC_EXCLUSIVE = 256 ; # [doc = "The gimbal orientation is determined by combining/mixing the RC signals feed to the gimbal's radio control inputs and the MAVLink messages for setting the gimbal orientation (GIMBAL_DEVICE_SET_ATTITUDE). How these two controls are combined or mixed is not defined by the protocol but is up to the implementation."] const GIMBAL_DEVICE_FLAGS_RC_MIXED = 512 ; } }
910impl GimbalDeviceFlags {
911    pub const DEFAULT: Self = Self::GIMBAL_DEVICE_FLAGS_RETRACT;
912}
913impl Default for GimbalDeviceFlags {
914    fn default() -> Self {
915        Self::DEFAULT
916    }
917}
918bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Gimbal manager high level capability flags (bitmap). The first 16 bits are identical to the GIMBAL_DEVICE_CAP_FLAGS. However, the gimbal manager does not need to copy the flags from the gimbal but can also enhance the capabilities and thus add flags."] pub struct GimbalManagerCapFlags : u32 { # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT."] const GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT = 1 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL."] const GIMBAL_MANAGER_CAP_FLAGS_HAS_NEUTRAL = 2 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS."] const GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_AXIS = 4 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW."] const GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_FOLLOW = 8 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK."] const GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_LOCK = 16 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS."] const GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_AXIS = 32 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW."] const GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_FOLLOW = 64 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK."] const GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_LOCK = 128 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS."] const GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_AXIS = 256 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW."] const GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_FOLLOW = 512 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK."] const GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_LOCK = 1024 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW."] const GIMBAL_MANAGER_CAP_FLAGS_SUPPORTS_INFINITE_YAW = 2048 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_YAW_IN_EARTH_FRAME."] const GIMBAL_MANAGER_CAP_FLAGS_SUPPORTS_YAW_IN_EARTH_FRAME = 4096 ; # [doc = "Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_RC_INPUTS."] const GIMBAL_MANAGER_CAP_FLAGS_HAS_RC_INPUTS = 8192 ; # [doc = "Gimbal manager supports to point to a local position."] const GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_LOCAL = 65536 ; # [doc = "Gimbal manager supports to point to a global latitude, longitude, altitude position."] const GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_GLOBAL = 131072 ; } }
919impl GimbalManagerCapFlags {
920    pub const DEFAULT: Self = Self::GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT;
921}
922impl Default for GimbalManagerCapFlags {
923    fn default() -> Self {
924        Self::DEFAULT
925    }
926}
927bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Flags for high level gimbal manager operation The first 16 bits are identical to the GIMBAL_DEVICE_FLAGS."] pub struct GimbalManagerFlags : u32 { # [doc = "Based on GIMBAL_DEVICE_FLAGS_RETRACT."] const GIMBAL_MANAGER_FLAGS_RETRACT = 1 ; # [doc = "Based on GIMBAL_DEVICE_FLAGS_NEUTRAL."] const GIMBAL_MANAGER_FLAGS_NEUTRAL = 2 ; # [doc = "Based on GIMBAL_DEVICE_FLAGS_ROLL_LOCK."] const GIMBAL_MANAGER_FLAGS_ROLL_LOCK = 4 ; # [doc = "Based on GIMBAL_DEVICE_FLAGS_PITCH_LOCK."] const GIMBAL_MANAGER_FLAGS_PITCH_LOCK = 8 ; # [doc = "Based on GIMBAL_DEVICE_FLAGS_YAW_LOCK."] const GIMBAL_MANAGER_FLAGS_YAW_LOCK = 16 ; # [doc = "Based on GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME."] const GIMBAL_MANAGER_FLAGS_YAW_IN_VEHICLE_FRAME = 32 ; # [doc = "Based on GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME."] const GIMBAL_MANAGER_FLAGS_YAW_IN_EARTH_FRAME = 64 ; # [doc = "Based on GIMBAL_DEVICE_FLAGS_ACCEPTS_YAW_IN_EARTH_FRAME."] const GIMBAL_MANAGER_FLAGS_ACCEPTS_YAW_IN_EARTH_FRAME = 128 ; # [doc = "Based on GIMBAL_DEVICE_FLAGS_RC_EXCLUSIVE."] const GIMBAL_MANAGER_FLAGS_RC_EXCLUSIVE = 256 ; # [doc = "Based on GIMBAL_DEVICE_FLAGS_RC_MIXED."] const GIMBAL_MANAGER_FLAGS_RC_MIXED = 512 ; } }
928impl GimbalManagerFlags {
929    pub const DEFAULT: Self = Self::GIMBAL_MANAGER_FLAGS_RETRACT;
930}
931impl Default for GimbalManagerFlags {
932    fn default() -> Self {
933        Self::DEFAULT
934    }
935}
936#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
937#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
938#[cfg_attr(feature = "serde", serde(tag = "type"))]
939#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
940#[repr(u32)]
941#[doc = "Type of GPS fix"]
942pub enum GpsFixType {
943    #[doc = "No GPS connected"]
944    GPS_FIX_TYPE_NO_GPS = 0,
945    #[doc = "No position information, GPS is connected"]
946    GPS_FIX_TYPE_NO_FIX = 1,
947    #[doc = "2D position"]
948    GPS_FIX_TYPE_2D_FIX = 2,
949    #[doc = "3D position"]
950    GPS_FIX_TYPE_3D_FIX = 3,
951    #[doc = "DGPS/SBAS aided 3D position"]
952    GPS_FIX_TYPE_DGPS = 4,
953    #[doc = "RTK float, 3D position"]
954    GPS_FIX_TYPE_RTK_FLOAT = 5,
955    #[doc = "RTK Fixed, 3D position"]
956    GPS_FIX_TYPE_RTK_FIXED = 6,
957    #[doc = "Static fixed, typically used for base stations"]
958    GPS_FIX_TYPE_STATIC = 7,
959    #[doc = "PPP, 3D position."]
960    GPS_FIX_TYPE_PPP = 8,
961}
962impl GpsFixType {
963    pub const DEFAULT: Self = Self::GPS_FIX_TYPE_NO_GPS;
964}
965impl Default for GpsFixType {
966    fn default() -> Self {
967        Self::DEFAULT
968    }
969}
970bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] pub struct GpsInputIgnoreFlags : u16 { # [doc = "ignore altitude field"] const GPS_INPUT_IGNORE_FLAG_ALT = 1 ; # [doc = "ignore hdop field"] const GPS_INPUT_IGNORE_FLAG_HDOP = 2 ; # [doc = "ignore vdop field"] const GPS_INPUT_IGNORE_FLAG_VDOP = 4 ; # [doc = "ignore horizontal velocity field (vn and ve)"] const GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 ; # [doc = "ignore vertical velocity field (vd)"] const GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 ; # [doc = "ignore speed accuracy field"] const GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 ; # [doc = "ignore horizontal accuracy field"] const GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 ; # [doc = "ignore vertical accuracy field"] const GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 ; } }
971impl GpsInputIgnoreFlags {
972    pub const DEFAULT: Self = Self::GPS_INPUT_IGNORE_FLAG_ALT;
973}
974impl Default for GpsInputIgnoreFlags {
975    fn default() -> Self {
976        Self::DEFAULT
977    }
978}
979#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
980#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
981#[cfg_attr(feature = "serde", serde(tag = "type"))]
982#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
983#[repr(u32)]
984#[doc = "Gripper actions."]
985pub enum GripperActions {
986    #[doc = "Gripper release cargo."]
987    GRIPPER_ACTION_RELEASE = 0,
988    #[doc = "Gripper grab onto cargo."]
989    GRIPPER_ACTION_GRAB = 1,
990}
991impl GripperActions {
992    pub const DEFAULT: Self = Self::GRIPPER_ACTION_RELEASE;
993}
994impl Default for GripperActions {
995    fn default() -> Self {
996        Self::DEFAULT
997    }
998}
999bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Flags in the HIGHRES_IMU message indicate which fields have updated since the last message"] pub struct HighresImuUpdatedFlags : u16 { # [doc = "The value in the xacc field has been updated"] const HIGHRES_IMU_UPDATED_XACC = 1 ; # [doc = "The value in the yacc field has been updated"] const HIGHRES_IMU_UPDATED_YACC = 2 ; # [doc = "The value in the zacc field has been updated since"] const HIGHRES_IMU_UPDATED_ZACC = 4 ; # [doc = "The value in the xgyro field has been updated"] const HIGHRES_IMU_UPDATED_XGYRO = 8 ; # [doc = "The value in the ygyro field has been updated"] const HIGHRES_IMU_UPDATED_YGYRO = 16 ; # [doc = "The value in the zgyro field has been updated"] const HIGHRES_IMU_UPDATED_ZGYRO = 32 ; # [doc = "The value in the xmag field has been updated"] const HIGHRES_IMU_UPDATED_XMAG = 64 ; # [doc = "The value in the ymag field has been updated"] const HIGHRES_IMU_UPDATED_YMAG = 128 ; # [doc = "The value in the zmag field has been updated"] const HIGHRES_IMU_UPDATED_ZMAG = 256 ; # [doc = "The value in the abs_pressure field has been updated"] const HIGHRES_IMU_UPDATED_ABS_PRESSURE = 512 ; # [doc = "The value in the diff_pressure field has been updated"] const HIGHRES_IMU_UPDATED_DIFF_PRESSURE = 1024 ; # [doc = "The value in the pressure_alt field has been updated"] const HIGHRES_IMU_UPDATED_PRESSURE_ALT = 2048 ; # [doc = "The value in the temperature field has been updated"] const HIGHRES_IMU_UPDATED_TEMPERATURE = 4096 ; } }
1000impl HighresImuUpdatedFlags {
1001    pub const DEFAULT: Self = Self::HIGHRES_IMU_UPDATED_XACC;
1002}
1003impl Default for HighresImuUpdatedFlags {
1004    fn default() -> Self {
1005        Self::DEFAULT
1006    }
1007}
1008bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Flags used in HIL_ACTUATOR_CONTROLS message."] pub struct HilActuatorControlsFlags : u64 { # [doc = "Simulation is using lockstep"] const HIL_ACTUATOR_CONTROLS_FLAGS_LOCKSTEP = 1 ; } }
1009impl HilActuatorControlsFlags {
1010    pub const DEFAULT: Self = Self::HIL_ACTUATOR_CONTROLS_FLAGS_LOCKSTEP;
1011}
1012impl Default for HilActuatorControlsFlags {
1013    fn default() -> Self {
1014        Self::DEFAULT
1015    }
1016}
1017bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Flags in the HIL_SENSOR message indicate which fields have updated since the last message"] pub struct HilSensorUpdatedFlags : u32 { # [doc = "The value in the xacc field has been updated"] const HIL_SENSOR_UPDATED_XACC = 1 ; # [doc = "The value in the yacc field has been updated"] const HIL_SENSOR_UPDATED_YACC = 2 ; # [doc = "The value in the zacc field has been updated"] const HIL_SENSOR_UPDATED_ZACC = 4 ; # [doc = "The value in the xgyro field has been updated"] const HIL_SENSOR_UPDATED_XGYRO = 8 ; # [doc = "The value in the ygyro field has been updated"] const HIL_SENSOR_UPDATED_YGYRO = 16 ; # [doc = "The value in the zgyro field has been updated"] const HIL_SENSOR_UPDATED_ZGYRO = 32 ; # [doc = "The value in the xmag field has been updated"] const HIL_SENSOR_UPDATED_XMAG = 64 ; # [doc = "The value in the ymag field has been updated"] const HIL_SENSOR_UPDATED_YMAG = 128 ; # [doc = "The value in the zmag field has been updated"] const HIL_SENSOR_UPDATED_ZMAG = 256 ; # [doc = "The value in the abs_pressure field has been updated"] const HIL_SENSOR_UPDATED_ABS_PRESSURE = 512 ; # [doc = "The value in the diff_pressure field has been updated"] const HIL_SENSOR_UPDATED_DIFF_PRESSURE = 1024 ; # [doc = "The value in the pressure_alt field has been updated"] const HIL_SENSOR_UPDATED_PRESSURE_ALT = 2048 ; # [doc = "The value in the temperature field has been updated"] const HIL_SENSOR_UPDATED_TEMPERATURE = 4096 ; # [doc = "Full reset of attitude/position/velocities/etc was performed in sim (Bit 31)."] const HIL_SENSOR_UPDATED_RESET = 2147483648 ; } }
1018impl HilSensorUpdatedFlags {
1019    pub const DEFAULT: Self = Self::HIL_SENSOR_UPDATED_XACC;
1020}
1021impl Default for HilSensorUpdatedFlags {
1022    fn default() -> Self {
1023        Self::DEFAULT
1024    }
1025}
1026bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Flags to report failure cases over the high latency telemetry."] pub struct HlFailureFlag : u16 { # [doc = "GPS failure."] const HL_FAILURE_FLAG_GPS = 1 ; # [doc = "Differential pressure sensor failure."] const HL_FAILURE_FLAG_DIFFERENTIAL_PRESSURE = 2 ; # [doc = "Absolute pressure sensor failure."] const HL_FAILURE_FLAG_ABSOLUTE_PRESSURE = 4 ; # [doc = "Accelerometer sensor failure."] const HL_FAILURE_FLAG_3D_ACCEL = 8 ; # [doc = "Gyroscope sensor failure."] const HL_FAILURE_FLAG_3D_GYRO = 16 ; # [doc = "Magnetometer sensor failure."] const HL_FAILURE_FLAG_3D_MAG = 32 ; # [doc = "Terrain subsystem failure."] const HL_FAILURE_FLAG_TERRAIN = 64 ; # [doc = "Battery failure/critical low battery."] const HL_FAILURE_FLAG_BATTERY = 128 ; # [doc = "RC receiver failure/no RC connection."] const HL_FAILURE_FLAG_RC_RECEIVER = 256 ; # [doc = "Offboard link failure."] const HL_FAILURE_FLAG_OFFBOARD_LINK = 512 ; # [doc = "Engine failure."] const HL_FAILURE_FLAG_ENGINE = 1024 ; # [doc = "Geofence violation."] const HL_FAILURE_FLAG_GEOFENCE = 2048 ; # [doc = "Estimator failure, for example measurement rejection or large variances."] const HL_FAILURE_FLAG_ESTIMATOR = 4096 ; # [doc = "Mission failure."] const HL_FAILURE_FLAG_MISSION = 8192 ; } }
1027impl HlFailureFlag {
1028    pub const DEFAULT: Self = Self::HL_FAILURE_FLAG_GPS;
1029}
1030impl Default for HlFailureFlag {
1031    fn default() -> Self {
1032        Self::DEFAULT
1033    }
1034}
1035bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Illuminator module error flags (bitmap, 0 means no error)"] pub struct IlluminatorErrorFlags : u32 { # [doc = "Illuminator thermal throttling error."] const ILLUMINATOR_ERROR_FLAGS_THERMAL_THROTTLING = 1 ; # [doc = "Illuminator over temperature shutdown error."] const ILLUMINATOR_ERROR_FLAGS_OVER_TEMPERATURE_SHUTDOWN = 2 ; # [doc = "Illuminator thermistor failure."] const ILLUMINATOR_ERROR_FLAGS_THERMISTOR_FAILURE = 4 ; } }
1036impl IlluminatorErrorFlags {
1037    pub const DEFAULT: Self = Self::ILLUMINATOR_ERROR_FLAGS_THERMAL_THROTTLING;
1038}
1039impl Default for IlluminatorErrorFlags {
1040    fn default() -> Self {
1041        Self::DEFAULT
1042    }
1043}
1044#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1045#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1046#[cfg_attr(feature = "serde", serde(tag = "type"))]
1047#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1048#[repr(u32)]
1049#[doc = "Modes of illuminator"]
1050pub enum IlluminatorMode {
1051    #[doc = "Illuminator mode is not specified/unknown"]
1052    ILLUMINATOR_MODE_UNKNOWN = 0,
1053    #[doc = "Illuminator behavior is controlled by MAV_CMD_DO_ILLUMINATOR_CONFIGURE settings"]
1054    ILLUMINATOR_MODE_INTERNAL_CONTROL = 1,
1055    #[doc = "Illuminator behavior is controlled by external factors: e.g. an external hardware signal"]
1056    ILLUMINATOR_MODE_EXTERNAL_SYNC = 2,
1057}
1058impl IlluminatorMode {
1059    pub const DEFAULT: Self = Self::ILLUMINATOR_MODE_UNKNOWN;
1060}
1061impl Default for IlluminatorMode {
1062    fn default() -> Self {
1063        Self::DEFAULT
1064    }
1065}
1066#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1067#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1068#[cfg_attr(feature = "serde", serde(tag = "type"))]
1069#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1070#[repr(u32)]
1071#[doc = "Type of landing target"]
1072pub enum LandingTargetType {
1073    #[doc = "Landing target signaled by light beacon (ex: IR-LOCK)"]
1074    LANDING_TARGET_TYPE_LIGHT_BEACON = 0,
1075    #[doc = "Landing target signaled by radio beacon (ex: ILS, NDB)"]
1076    LANDING_TARGET_TYPE_RADIO_BEACON = 1,
1077    #[doc = "Landing target represented by a fiducial marker (ex: ARTag)"]
1078    LANDING_TARGET_TYPE_VISION_FIDUCIAL = 2,
1079    #[doc = "Landing target represented by a pre-defined visual shape/feature (ex: X-marker, H-marker, square)"]
1080    LANDING_TARGET_TYPE_VISION_OTHER = 3,
1081}
1082impl LandingTargetType {
1083    pub const DEFAULT: Self = Self::LANDING_TARGET_TYPE_LIGHT_BEACON;
1084}
1085impl Default for LandingTargetType {
1086    fn default() -> Self {
1087        Self::DEFAULT
1088    }
1089}
1090#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1091#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1092#[cfg_attr(feature = "serde", serde(tag = "type"))]
1093#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1094#[repr(u32)]
1095pub enum MagCalStatus {
1096    MAG_CAL_NOT_STARTED = 0,
1097    MAG_CAL_WAITING_TO_START = 1,
1098    MAG_CAL_RUNNING_STEP_ONE = 2,
1099    MAG_CAL_RUNNING_STEP_TWO = 3,
1100    MAG_CAL_SUCCESS = 4,
1101    MAG_CAL_FAILED = 5,
1102    MAG_CAL_BAD_ORIENTATION = 6,
1103    MAG_CAL_BAD_RADIUS = 7,
1104}
1105impl MagCalStatus {
1106    pub const DEFAULT: Self = Self::MAG_CAL_NOT_STARTED;
1107}
1108impl Default for MagCalStatus {
1109    fn default() -> Self {
1110        Self::DEFAULT
1111    }
1112}
1113#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1114#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1115#[cfg_attr(feature = "serde", serde(tag = "type"))]
1116#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1117#[repr(u32)]
1118pub enum MavArmAuthDeniedReason {
1119    #[doc = "Not a specific reason"]
1120    MAV_ARM_AUTH_DENIED_REASON_GENERIC = 0,
1121    #[doc = "Authorizer will send the error as string to GCS"]
1122    MAV_ARM_AUTH_DENIED_REASON_NONE = 1,
1123    #[doc = "At least one waypoint have a invalid value"]
1124    MAV_ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT = 2,
1125    #[doc = "Timeout in the authorizer process(in case it depends on network)"]
1126    MAV_ARM_AUTH_DENIED_REASON_TIMEOUT = 3,
1127    #[doc = "Airspace of the mission in use by another vehicle, second result parameter can have the waypoint id that caused it to be denied."]
1128    MAV_ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE = 4,
1129    #[doc = "Weather is not good to fly"]
1130    MAV_ARM_AUTH_DENIED_REASON_BAD_WEATHER = 5,
1131}
1132impl MavArmAuthDeniedReason {
1133    pub const DEFAULT: Self = Self::MAV_ARM_AUTH_DENIED_REASON_GENERIC;
1134}
1135impl Default for MavArmAuthDeniedReason {
1136    fn default() -> Self {
1137        Self::DEFAULT
1138    }
1139}
1140#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1141#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1142#[cfg_attr(feature = "serde", serde(tag = "type"))]
1143#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1144#[repr(u32)]
1145#[doc = "Micro air vehicle / autopilot classes. This identifies the individual model."]
1146pub enum MavAutopilot {
1147    #[doc = "Generic autopilot, full support for everything"]
1148    MAV_AUTOPILOT_GENERIC = 0,
1149    #[doc = "Reserved for future use."]
1150    MAV_AUTOPILOT_RESERVED = 1,
1151    #[doc = "SLUGS autopilot, <http://slugsuav.soe.ucsc.edu>"]
1152    MAV_AUTOPILOT_SLUGS = 2,
1153    #[doc = "ArduPilot - Plane/Copter/Rover/Sub/Tracker, <https://ardupilot.org>"]
1154    MAV_AUTOPILOT_ARDUPILOTMEGA = 3,
1155    #[doc = "OpenPilot, <http://openpilot.org>"]
1156    MAV_AUTOPILOT_OPENPILOT = 4,
1157    #[doc = "Generic autopilot only supporting simple waypoints"]
1158    MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY = 5,
1159    #[doc = "Generic autopilot supporting waypoints and other simple navigation commands"]
1160    MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY = 6,
1161    #[doc = "Generic autopilot supporting the full mission command set"]
1162    MAV_AUTOPILOT_GENERIC_MISSION_FULL = 7,
1163    #[doc = "No valid autopilot, e.g. a GCS or other MAVLink component"]
1164    MAV_AUTOPILOT_INVALID = 8,
1165    #[doc = "PPZ UAV - <http://nongnu.org/paparazzi>"]
1166    MAV_AUTOPILOT_PPZ = 9,
1167    #[doc = "UAV Dev Board"]
1168    MAV_AUTOPILOT_UDB = 10,
1169    #[doc = "FlexiPilot"]
1170    MAV_AUTOPILOT_FP = 11,
1171    #[doc = "PX4 Autopilot - <http://px4.io/>"]
1172    MAV_AUTOPILOT_PX4 = 12,
1173    #[doc = "SMACCMPilot - <http://smaccmpilot.org>"]
1174    MAV_AUTOPILOT_SMACCMPILOT = 13,
1175    #[doc = "AutoQuad -- <http://autoquad.org>"]
1176    MAV_AUTOPILOT_AUTOQUAD = 14,
1177    #[doc = "Armazila -- <http://armazila.com>"]
1178    MAV_AUTOPILOT_ARMAZILA = 15,
1179    #[doc = "Aerob -- <http://aerob.ru>"]
1180    MAV_AUTOPILOT_AEROB = 16,
1181    #[doc = "ASLUAV autopilot -- <http://www.asl.ethz.ch>"]
1182    MAV_AUTOPILOT_ASLUAV = 17,
1183    #[doc = "SmartAP Autopilot - <http://sky-drones.com>"]
1184    MAV_AUTOPILOT_SMARTAP = 18,
1185    #[doc = "AirRails - <http://uaventure.com>"]
1186    MAV_AUTOPILOT_AIRRAILS = 19,
1187    #[doc = "Fusion Reflex - <https://fusion.engineering>"]
1188    MAV_AUTOPILOT_REFLEX = 20,
1189}
1190impl MavAutopilot {
1191    pub const DEFAULT: Self = Self::MAV_AUTOPILOT_GENERIC;
1192}
1193impl Default for MavAutopilot {
1194    fn default() -> Self {
1195        Self::DEFAULT
1196    }
1197}
1198#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1199#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1200#[cfg_attr(feature = "serde", serde(tag = "type"))]
1201#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1202#[repr(u32)]
1203#[doc = "Enumeration for battery charge states."]
1204pub enum MavBatteryChargeState {
1205    #[doc = "Low battery state is not provided"]
1206    MAV_BATTERY_CHARGE_STATE_UNDEFINED = 0,
1207    #[doc = "Battery is not in low state. Normal operation."]
1208    MAV_BATTERY_CHARGE_STATE_OK = 1,
1209    #[doc = "Battery state is low, warn and monitor close."]
1210    MAV_BATTERY_CHARGE_STATE_LOW = 2,
1211    #[doc = "Battery state is critical, return or abort immediately."]
1212    MAV_BATTERY_CHARGE_STATE_CRITICAL = 3,
1213    #[doc = "Battery state is too low for ordinary abort sequence. Perform fastest possible emergency stop to prevent damage."]
1214    MAV_BATTERY_CHARGE_STATE_EMERGENCY = 4,
1215    #[doc = "Battery failed, damage unavoidable. Possible causes (faults) are listed in MAV_BATTERY_FAULT."]
1216    MAV_BATTERY_CHARGE_STATE_FAILED = 5,
1217    #[doc = "Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in MAV_BATTERY_FAULT."]
1218    MAV_BATTERY_CHARGE_STATE_UNHEALTHY = 6,
1219    #[doc = "Battery is charging."]
1220    MAV_BATTERY_CHARGE_STATE_CHARGING = 7,
1221}
1222impl MavBatteryChargeState {
1223    pub const DEFAULT: Self = Self::MAV_BATTERY_CHARGE_STATE_UNDEFINED;
1224}
1225impl Default for MavBatteryChargeState {
1226    fn default() -> Self {
1227        Self::DEFAULT
1228    }
1229}
1230bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Smart battery supply status/fault flags (bitmask) for health indication. The battery must also report either MAV_BATTERY_CHARGE_STATE_FAILED or MAV_BATTERY_CHARGE_STATE_UNHEALTHY if any of these are set."] pub struct MavBatteryFault : u32 { # [doc = "Battery has deep discharged."] const MAV_BATTERY_FAULT_DEEP_DISCHARGE = 1 ; # [doc = "Voltage spikes."] const MAV_BATTERY_FAULT_SPIKES = 2 ; # [doc = "One or more cells have failed. Battery should also report MAV_BATTERY_CHARGE_STATE_FAILE (and should not be used)."] const MAV_BATTERY_FAULT_CELL_FAIL = 4 ; # [doc = "Over-current fault."] const MAV_BATTERY_FAULT_OVER_CURRENT = 8 ; # [doc = "Over-temperature fault."] const MAV_BATTERY_FAULT_OVER_TEMPERATURE = 16 ; # [doc = "Under-temperature fault."] const MAV_BATTERY_FAULT_UNDER_TEMPERATURE = 32 ; # [doc = "Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage)."] const MAV_BATTERY_FAULT_INCOMPATIBLE_VOLTAGE = 64 ; # [doc = "Battery firmware is not compatible with current autopilot firmware."] const MAV_BATTERY_FAULT_INCOMPATIBLE_FIRMWARE = 128 ; # [doc = "Battery is not compatible due to cell configuration (e.g. 5s1p when vehicle requires 6s)."] const BATTERY_FAULT_INCOMPATIBLE_CELLS_CONFIGURATION = 256 ; } }
1231impl MavBatteryFault {
1232    pub const DEFAULT: Self = Self::MAV_BATTERY_FAULT_DEEP_DISCHARGE;
1233}
1234impl Default for MavBatteryFault {
1235    fn default() -> Self {
1236        Self::DEFAULT
1237    }
1238}
1239#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1240#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1241#[cfg_attr(feature = "serde", serde(tag = "type"))]
1242#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1243#[repr(u32)]
1244#[doc = "Enumeration of battery functions"]
1245pub enum MavBatteryFunction {
1246    #[doc = "Battery function is unknown"]
1247    MAV_BATTERY_FUNCTION_UNKNOWN = 0,
1248    #[doc = "Battery supports all flight systems"]
1249    MAV_BATTERY_FUNCTION_ALL = 1,
1250    #[doc = "Battery for the propulsion system"]
1251    MAV_BATTERY_FUNCTION_PROPULSION = 2,
1252    #[doc = "Avionics battery"]
1253    MAV_BATTERY_FUNCTION_AVIONICS = 3,
1254    #[doc = "Payload battery"]
1255    MAV_BATTERY_FUNCTION_PAYLOAD = 4,
1256}
1257impl MavBatteryFunction {
1258    pub const DEFAULT: Self = Self::MAV_BATTERY_FUNCTION_UNKNOWN;
1259}
1260impl Default for MavBatteryFunction {
1261    fn default() -> Self {
1262        Self::DEFAULT
1263    }
1264}
1265#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1266#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1267#[cfg_attr(feature = "serde", serde(tag = "type"))]
1268#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1269#[repr(u32)]
1270#[doc = "Battery mode. Note, the normal operation mode (i.e. when flying) should be reported as MAV_BATTERY_MODE_UNKNOWN to allow message trimming in normal flight."]
1271pub enum MavBatteryMode {
1272    #[doc = "Battery mode not supported/unknown battery mode/normal operation."]
1273    MAV_BATTERY_MODE_UNKNOWN = 0,
1274    #[doc = "Battery is auto discharging (towards storage level)."]
1275    MAV_BATTERY_MODE_AUTO_DISCHARGING = 1,
1276    #[doc = "Battery in hot-swap mode (current limited to prevent spikes that might damage sensitive electrical circuits)."]
1277    MAV_BATTERY_MODE_HOT_SWAP = 2,
1278}
1279impl MavBatteryMode {
1280    pub const DEFAULT: Self = Self::MAV_BATTERY_MODE_UNKNOWN;
1281}
1282impl Default for MavBatteryMode {
1283    fn default() -> Self {
1284        Self::DEFAULT
1285    }
1286}
1287#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1288#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1289#[cfg_attr(feature = "serde", serde(tag = "type"))]
1290#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1291#[repr(u32)]
1292#[doc = "Enumeration of battery types"]
1293pub enum MavBatteryType {
1294    #[doc = "Not specified."]
1295    MAV_BATTERY_TYPE_UNKNOWN = 0,
1296    #[doc = "Lithium polymer battery"]
1297    MAV_BATTERY_TYPE_LIPO = 1,
1298    #[doc = "Lithium-iron-phosphate battery"]
1299    MAV_BATTERY_TYPE_LIFE = 2,
1300    #[doc = "Lithium-ION battery"]
1301    MAV_BATTERY_TYPE_LION = 3,
1302    #[doc = "Nickel metal hydride battery"]
1303    MAV_BATTERY_TYPE_NIMH = 4,
1304}
1305impl MavBatteryType {
1306    pub const DEFAULT: Self = Self::MAV_BATTERY_TYPE_UNKNOWN;
1307}
1308impl Default for MavBatteryType {
1309    fn default() -> Self {
1310        Self::DEFAULT
1311    }
1312}
1313#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1314#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1315#[cfg_attr(feature = "serde", serde(tag = "type"))]
1316#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1317#[repr(u32)]
1318#[doc = "Commands to be executed by the MAV. They can be executed on user request, or as part of a mission script. If the action is used in a mission, the parameter mapping to the waypoint/mission message is as follows: Param 1, Param 2, Param 3, Param 4, X: Param 5, Y:Param 6, Z:Param 7. This command list is similar what ARINC 424 is for commercial aircraft: A data format how to interpret waypoint/mission data. NaN and INT32_MAX may be used in float/integer params (respectively) to indicate optional/default values (e.g. to use the component's current yaw or latitude rather than a specific value). See <https://mavlink.io/en/guide/xml_schema.html#MAV_CMD> for information about the structure of the MAV_CMD entries"]
1319pub enum MavCmd {
1320    #[doc = "Navigate to waypoint. This is intended for use in missions (for guided commands outside of missions use MAV_CMD_DO_REPOSITION)."]
1321    MAV_CMD_NAV_WAYPOINT = 16,
1322    #[doc = "Loiter around this waypoint an unlimited amount of time"]
1323    MAV_CMD_NAV_LOITER_UNLIM = 17,
1324    #[doc = "Loiter around this waypoint for X turns"]
1325    MAV_CMD_NAV_LOITER_TURNS = 18,
1326    #[doc = "Loiter at the specified latitude, longitude and altitude for a certain amount of time. Multicopter vehicles stop at the point (within a vehicle-specific acceptance radius). Forward-only moving vehicles (e.g. fixed-wing) circle the point with the specified radius/direction. If the Heading Required parameter (2) is non-zero forward moving aircraft will only leave the loiter circle once heading towards the next waypoint."]
1327    MAV_CMD_NAV_LOITER_TIME = 19,
1328    #[doc = "Return to launch location"]
1329    MAV_CMD_NAV_RETURN_TO_LAUNCH = 20,
1330    #[doc = "Land at location."]
1331    MAV_CMD_NAV_LAND = 21,
1332    #[doc = "Takeoff from ground / hand. Vehicles that support multiple takeoff modes (e.g. VTOL quadplane) should take off using the currently configured mode."]
1333    MAV_CMD_NAV_TAKEOFF = 22,
1334    #[doc = "Land at local position (local frame only)"]
1335    MAV_CMD_NAV_LAND_LOCAL = 23,
1336    #[doc = "Takeoff from local position (local frame only)"]
1337    MAV_CMD_NAV_TAKEOFF_LOCAL = 24,
1338    #[doc = "Vehicle following, i.e. this waypoint represents the position of a moving vehicle"]
1339    MAV_CMD_NAV_FOLLOW = 25,
1340    #[doc = "Continue on the current course and climb/descend to specified altitude.  When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached."]
1341    MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30,
1342    #[doc = "Begin loiter at the specified Latitude and Longitude.  If Lat=Lon=0, then loiter at the current position.  Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint."]
1343    MAV_CMD_NAV_LOITER_TO_ALT = 31,
1344    #[doc = "Begin following a target"]
1345    MAV_CMD_DO_FOLLOW = 32,
1346    #[doc = "Reposition the MAV after a follow target command has been sent"]
1347    MAV_CMD_DO_FOLLOW_REPOSITION = 33,
1348    #[doc = "Start orbiting on the circumference of a circle defined by the parameters. Setting values to NaN/INT32_MAX (as appropriate) results in using defaults."]
1349    MAV_CMD_DO_ORBIT = 34,
1350    #[deprecated = " See `MAV_CMD_DO_SET_ROI_*` (Deprecated since 2018-01)"]
1351    #[doc = "Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicle's control system to control the vehicle attitude and the attitude of various sensors such as cameras."]
1352    MAV_CMD_NAV_ROI = 80,
1353    #[doc = "Control autonomous path planning on the MAV."]
1354    MAV_CMD_NAV_PATHPLANNING = 81,
1355    #[doc = "Navigate to waypoint using a spline path."]
1356    MAV_CMD_NAV_SPLINE_WAYPOINT = 82,
1357    #[doc = "Takeoff from ground using VTOL mode, and transition to forward flight with specified heading. The command should be ignored by vehicles that dont support both VTOL and fixed-wing flight (multicopters, boats,etc.)."]
1358    MAV_CMD_NAV_VTOL_TAKEOFF = 84,
1359    #[doc = "Land using VTOL mode"]
1360    MAV_CMD_NAV_VTOL_LAND = 85,
1361    #[doc = "hand control over to an external controller"]
1362    MAV_CMD_NAV_GUIDED_ENABLE = 92,
1363    #[doc = "Delay the next navigation command a number of seconds or until a specified time"]
1364    MAV_CMD_NAV_DELAY = 93,
1365    #[doc = "Descend and place payload. Vehicle moves to specified location, descends until it detects a hanging payload has reached the ground, and then releases the payload. If ground is not detected before the reaching the maximum descent value (param1), the command will complete without releasing the payload."]
1366    MAV_CMD_NAV_PAYLOAD_PLACE = 94,
1367    #[doc = "NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration"]
1368    MAV_CMD_NAV_LAST = 95,
1369    #[doc = "Delay mission state machine."]
1370    MAV_CMD_CONDITION_DELAY = 112,
1371    #[doc = "Ascend/descend to target altitude at specified rate. Delay mission state machine until desired altitude reached."]
1372    MAV_CMD_CONDITION_CHANGE_ALT = 113,
1373    #[doc = "Delay mission state machine until within desired distance of next NAV point."]
1374    MAV_CMD_CONDITION_DISTANCE = 114,
1375    #[doc = "Reach a certain target angle."]
1376    MAV_CMD_CONDITION_YAW = 115,
1377    #[doc = "NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration"]
1378    MAV_CMD_CONDITION_LAST = 159,
1379    #[doc = "Set system mode."]
1380    MAV_CMD_DO_SET_MODE = 176,
1381    #[doc = "Jump to the desired command in the mission list.  Repeat this action only the specified number of times"]
1382    MAV_CMD_DO_JUMP = 177,
1383    #[doc = "Change speed and/or throttle set points. The value persists until it is overridden or there is a mode change"]
1384    MAV_CMD_DO_CHANGE_SPEED = 178,
1385    #[doc = "Sets the home position to either to the current position or a specified position.           The home position is the default position that the system will return to and land on.           The position is set automatically by the system during the takeoff (and may also be set using this command).           Note: the current home position may be emitted in a HOME_POSITION message on request (using MAV_CMD_REQUEST_MESSAGE with param1=242)."]
1386    MAV_CMD_DO_SET_HOME = 179,
1387    #[deprecated = " See `PARAM_SET` (Deprecated since 2024-04)"]
1388    #[doc = "Set a system parameter.  Caution!  Use of this command requires knowledge of the numeric enumeration value of the parameter."]
1389    MAV_CMD_DO_SET_PARAMETER = 180,
1390    #[doc = "Set a relay to a condition."]
1391    MAV_CMD_DO_SET_RELAY = 181,
1392    #[doc = "Cycle a relay on and off for a desired number of cycles with a desired period."]
1393    MAV_CMD_DO_REPEAT_RELAY = 182,
1394    #[doc = "Set a servo to a desired PWM value."]
1395    MAV_CMD_DO_SET_SERVO = 183,
1396    #[doc = "Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period."]
1397    MAV_CMD_DO_REPEAT_SERVO = 184,
1398    #[doc = "0.5); the ACK should be either MAV_RESULT_FAILED or MAV_RESULT_UNSUPPORTED."]
1399    MAV_CMD_DO_FLIGHTTERMINATION = 185,
1400    #[doc = "Change altitude set point."]
1401    MAV_CMD_DO_CHANGE_ALTITUDE = 186,
1402    #[doc = "Sets actuators (e.g. servos) to a desired value. The actuator numbers are mapped to specific outputs (e.g. on any MAIN or AUX PWM or UAVCAN) using a flight-stack specific mechanism (i.e. a parameter)."]
1403    MAV_CMD_DO_SET_ACTUATOR = 187,
1404    #[doc = "Mission item to specify the start of a failsafe/landing return-path segment (the end of the segment is the next MAV_CMD_DO_LAND_START item).           A vehicle that is using missions for landing (e.g. in a return mode) will join the mission on the closest path of the return-path segment (instead of MAV_CMD_DO_LAND_START or the nearest waypoint).           The main use case is to minimize the failsafe flight path in corridor missions, where the inbound/outbound paths are constrained (by geofences) to the same particular path.           The MAV_CMD_NAV_RETURN_PATH_START would be placed at the start of the return path.           If a failsafe occurs on the outbound path the vehicle will move to the nearest point on the return path (which is parallel for this kind of mission), effectively turning round and following the shortest path to landing.           If a failsafe occurs on the inbound path the vehicle is already on the return segment and will continue to landing.           The Latitude/Longitude/Altitude are optional, and may be set to 0 if not needed.           If specified, the item defines the waypoint at which the return segment starts.           If sent using as a command, the vehicle will perform a mission landing (using the land segment if defined) or reject the command if mission landings are not supported, or no mission landing is defined. When used as a command any position information in the command is ignored."]
1405    MAV_CMD_DO_RETURN_PATH_START = 188,
1406    #[doc = "Mission item to mark the start of a mission landing pattern, or a command to land with a mission landing pattern.          When used in a mission, this is a marker for the start of a sequence of mission items that represent a landing pattern.         It should be followed by a navigation item that defines the first waypoint of the landing sequence.         The start marker positional params are used only for selecting what landing pattern to use if several are defined in the mission (the selected pattern will be the one with the marker position that is closest to the vehicle when a landing is commanded).         If the marker item position has zero-values for latitude, longitude, and altitude, then landing pattern selection is instead based on the position of the first waypoint in the landing sequence.  \t      When sent as a command it triggers a landing using a mission landing pattern. \t      The location parameters are not used in this case, and should be set to 0."]
1407    MAV_CMD_DO_LAND_START = 189,
1408    #[doc = "Mission command to perform a landing from a rally point."]
1409    MAV_CMD_DO_RALLY_LAND = 190,
1410    #[doc = "Mission command to safely abort an autonomous landing."]
1411    MAV_CMD_DO_GO_AROUND = 191,
1412    #[doc = "Reposition the vehicle to a specific WGS84 global position. This command is intended for guided commands (for missions use MAV_CMD_NAV_WAYPOINT instead)."]
1413    MAV_CMD_DO_REPOSITION = 192,
1414    #[doc = "If in a GPS controlled position mode, hold the current position or continue."]
1415    MAV_CMD_DO_PAUSE_CONTINUE = 193,
1416    #[doc = "Set moving direction to forward or reverse."]
1417    MAV_CMD_DO_SET_REVERSE = 194,
1418    #[doc = "Sets the region of interest (ROI) to a location. This can then be used by the vehicle's control system to control the vehicle attitude and the attitude of various sensors such as cameras. This command can be sent to a gimbal manager but not to a gimbal device. A gimbal is not to react to this message."]
1419    MAV_CMD_DO_SET_ROI_LOCATION = 195,
1420    #[doc = "Sets the region of interest (ROI) to be toward next waypoint, with optional pitch/roll/yaw offset. This can then be used by the vehicle's control system to control the vehicle attitude and the attitude of various sensors such as cameras. This command can be sent to a gimbal manager but not to a gimbal device. A gimbal device is not to react to this message."]
1421    MAV_CMD_DO_SET_ROI_WPNEXT_OFFSET = 196,
1422    #[doc = "Cancels any previous ROI command returning the vehicle/sensors to default flight characteristics. This can then be used by the vehicle's control system to control the vehicle attitude and the attitude of various sensors such as cameras. This command can be sent to a gimbal manager but not to a gimbal device. A gimbal device is not to react to this message. After this command the gimbal manager should go back to manual input if available, and otherwise assume a neutral position."]
1423    MAV_CMD_DO_SET_ROI_NONE = 197,
1424    #[doc = "Mount tracks system with specified system ID. Determination of target vehicle position may be done with GLOBAL_POSITION_INT or any other means. This command can be sent to a gimbal manager but not to a gimbal device. A gimbal device is not to react to this message."]
1425    MAV_CMD_DO_SET_ROI_SYSID = 198,
1426    #[doc = "Control onboard camera system."]
1427    MAV_CMD_DO_CONTROL_VIDEO = 200,
1428    #[deprecated = " See `MAV_CMD_DO_SET_ROI_*` (Deprecated since 2018-01)"]
1429    #[doc = "Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicle's control system to control the vehicle attitude and the attitude of various sensors such as cameras."]
1430    MAV_CMD_DO_SET_ROI = 201,
1431    #[doc = "Configure digital camera. This is a fallback message for systems that have not yet implemented PARAM_EXT_XXX messages and camera definition files (see <https://mavlink.io/en/services/camera_def.html> )."]
1432    MAV_CMD_DO_DIGICAM_CONFIGURE = 202,
1433    #[doc = "Control digital camera. This is a fallback message for systems that have not yet implemented PARAM_EXT_XXX messages and camera definition files (see <https://mavlink.io/en/services/camera_def.html> )."]
1434    MAV_CMD_DO_DIGICAM_CONTROL = 203,
1435    #[deprecated = "This message has been superseded by MAV_CMD_DO_GIMBAL_MANAGER_CONFIGURE. The message can still be used to communicate with legacy gimbals implementing it. See `MAV_CMD_DO_GIMBAL_MANAGER_CONFIGURE` (Deprecated since 2020-01)"]
1436    #[doc = "Mission command to configure a camera or antenna mount"]
1437    MAV_CMD_DO_MOUNT_CONFIGURE = 204,
1438    #[deprecated = "This message is ambiguous and inconsistent. It has been superseded by MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW and `MAV_CMD_DO_SET_ROI_*` variants. The message can still be used to communicate with legacy gimbals implementing it. See `MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW` (Deprecated since 2020-01)"]
1439    #[doc = "Mission command to control a camera or antenna mount"]
1440    MAV_CMD_DO_MOUNT_CONTROL = 205,
1441    #[doc = "Mission command to set camera trigger distance for this flight. The camera is triggered each time this distance is exceeded. This command can also be used to set the shutter integration time for the camera."]
1442    MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206,
1443    #[doc = "Enable the geofence.           This can be used in a mission or via the command protocol.           The persistence/lifetime of the setting is undefined.           Depending on flight stack implementation it may persist until superseded, or it may revert to a system default at the end of a mission.           Flight stacks typically reset the setting to system defaults on reboot."]
1444    MAV_CMD_DO_FENCE_ENABLE = 207,
1445    #[doc = "Mission item/command to release a parachute or enable/disable auto release."]
1446    MAV_CMD_DO_PARACHUTE = 208,
1447    #[doc = "Command to perform motor test."]
1448    MAV_CMD_DO_MOTOR_TEST = 209,
1449    #[doc = "Change to/from inverted flight."]
1450    MAV_CMD_DO_INVERTED_FLIGHT = 210,
1451    #[doc = "Mission command to operate a gripper."]
1452    MAV_CMD_DO_GRIPPER = 211,
1453    #[doc = "Enable/disable autotune."]
1454    MAV_CMD_DO_AUTOTUNE_ENABLE = 212,
1455    #[doc = "Sets a desired vehicle turn angle and speed change."]
1456    MAV_CMD_NAV_SET_YAW_SPEED = 213,
1457    #[doc = "Mission command to set camera trigger interval for this flight. If triggering is enabled, the camera is triggered each time this interval expires. This command can also be used to set the shutter integration time for the camera."]
1458    MAV_CMD_DO_SET_CAM_TRIGG_INTERVAL = 214,
1459    #[deprecated = " See `MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW` (Deprecated since 2020-01)"]
1460    #[doc = "Mission command to control a camera or antenna mount, using a quaternion as reference."]
1461    MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220,
1462    #[doc = "set id of master controller"]
1463    MAV_CMD_DO_GUIDED_MASTER = 221,
1464    #[doc = "Set limits for external control"]
1465    MAV_CMD_DO_GUIDED_LIMITS = 222,
1466    #[doc = "Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines"]
1467    MAV_CMD_DO_ENGINE_CONTROL = 223,
1468    #[doc = "Set the mission item with sequence number seq as the current item and emit MISSION_CURRENT (whether or not the mission number changed).           If a mission is currently being executed, the system will continue to this new mission item on the shortest path, skipping any intermediate mission items. \t  Note that mission jump repeat counters are not reset unless param2 is set (see MAV_CMD_DO_JUMP param2).            This command may trigger a mission state-machine change on some systems: for example from MISSION_STATE_NOT_STARTED or MISSION_STATE_PAUSED to MISSION_STATE_ACTIVE.           If the system is in mission mode, on those systems this command might therefore start, restart or resume the mission.           If the system is not in mission mode this command must not trigger a switch to mission mode.            The mission may be \"reset\" using param2.           Resetting sets jump counters to initial values (to reset counters without changing the current mission item set the param1 to `-1`).           Resetting also explicitly changes a mission state of MISSION_STATE_COMPLETE to MISSION_STATE_PAUSED or MISSION_STATE_ACTIVE, potentially allowing it to resume when it is (next) in a mission mode.  \t  The command will ACK with MAV_RESULT_FAILED if the sequence number is out of range (including if there is no mission item)."]
1469    MAV_CMD_DO_SET_MISSION_CURRENT = 224,
1470    #[doc = "NOP - This command is only used to mark the upper limit of the DO commands in the enumeration"]
1471    MAV_CMD_DO_LAST = 240,
1472    #[doc = "Trigger calibration. This command will be only accepted if in pre-flight mode. Except for Temperature Calibration, only one sensor should be set in a single message and all others should be zero."]
1473    MAV_CMD_PREFLIGHT_CALIBRATION = 241,
1474    #[doc = "Set sensor offsets. This command will be only accepted if in pre-flight mode."]
1475    MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242,
1476    #[doc = "Trigger UAVCAN configuration (actuator ID assignment and direction mapping). Note that this maps to the legacy UAVCAN v0 function UAVCAN_ENUMERATE, which is intended to be executed just once during initial vehicle configuration (it is not a normal pre-flight command and has been poorly named)."]
1477    MAV_CMD_PREFLIGHT_UAVCAN = 243,
1478    #[doc = "Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode."]
1479    MAV_CMD_PREFLIGHT_STORAGE = 245,
1480    #[doc = "Request the reboot or shutdown of system components."]
1481    MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246,
1482    #[doc = "Override current mission with command to pause mission, pause mission and move to position, continue/resume mission. When param 1 indicates that the mission is paused (MAV_GOTO_DO_HOLD), param 2 defines whether it holds in place or moves to another position."]
1483    MAV_CMD_OVERRIDE_GOTO = 252,
1484    #[doc = "Mission command to set a Camera Auto Mount Pivoting Oblique Survey (Replaces CAM_TRIGG_DIST for this purpose). The camera is triggered each time this distance is exceeded, then the mount moves to the next position. Params 4~6 set-up the angle limits and number of positions for oblique survey, where mount-enabled vehicles automatically roll the camera between shots to emulate an oblique camera setup (providing an increased HFOV). This command can also be used to set the shutter integration time for the camera."]
1485    MAV_CMD_OBLIQUE_SURVEY = 260,
1486    #[doc = "Enable the specified standard MAVLink mode.           If the specified mode is not supported, the vehicle should ACK with MAV_RESULT_FAILED.           See <https://mavlink.io/en/services/standard_modes.html>"]
1487    MAV_CMD_DO_SET_STANDARD_MODE = 262,
1488    #[doc = "start running a mission"]
1489    MAV_CMD_MISSION_START = 300,
1490    #[doc = "Actuator testing command. This is similar to MAV_CMD_DO_MOTOR_TEST but operates on the level of output functions, i.e. it is possible to test Motor1 independent from which output it is configured on. Autopilots must NACK this command with MAV_RESULT_TEMPORARILY_REJECTED while armed."]
1491    MAV_CMD_ACTUATOR_TEST = 310,
1492    #[doc = "Actuator configuration command."]
1493    MAV_CMD_CONFIGURE_ACTUATOR = 311,
1494    #[doc = "Arms / Disarms a component"]
1495    MAV_CMD_COMPONENT_ARM_DISARM = 400,
1496    #[doc = "Instructs a target system to run pre-arm checks.           This allows preflight checks to be run on demand, which may be useful on systems that normally run them at low rate, or which do not trigger checks when the armable state might have changed.           This command should return MAV_RESULT_ACCEPTED if it will run the checks.           The results of the checks are usually then reported in SYS_STATUS messages (this is system-specific).           The command should return MAV_RESULT_TEMPORARILY_REJECTED if the system is already armed."]
1497    MAV_CMD_RUN_PREARM_CHECKS = 401,
1498    #[doc = "Turns illuminators ON/OFF. An illuminator is a light source that is used for lighting up dark areas external to the system: e.g. a torch or searchlight (as opposed to a light source for illuminating the system itself, e.g. an indicator light)."]
1499    MAV_CMD_ILLUMINATOR_ON_OFF = 405,
1500    #[doc = "Configures illuminator settings. An illuminator is a light source that is used for lighting up dark areas external to the system: e.g. a torch or searchlight (as opposed to a light source for illuminating the system itself, e.g. an indicator light)."]
1501    MAV_CMD_DO_ILLUMINATOR_CONFIGURE = 406,
1502    #[deprecated = " See `MAV_CMD_REQUEST_MESSAGE` (Deprecated since 2022-04)"]
1503    #[doc = "Request the home position from the vehicle. \t  The vehicle will ACK the command and then emit the HOME_POSITION message."]
1504    MAV_CMD_GET_HOME_POSITION = 410,
1505    #[doc = "Inject artificial failure for testing purposes. Note that autopilots should implement an additional protection before accepting this command such as a specific param setting."]
1506    MAV_CMD_INJECT_FAILURE = 420,
1507    #[doc = "Starts receiver pairing."]
1508    MAV_CMD_START_RX_PAIR = 500,
1509    #[deprecated = " See `MAV_CMD_REQUEST_MESSAGE` (Deprecated since 2022-04)"]
1510    #[doc = "Request the interval between messages for a particular MAVLink message ID.           The receiver should ACK the command and then emit its response in a MESSAGE_INTERVAL message."]
1511    MAV_CMD_GET_MESSAGE_INTERVAL = 510,
1512    #[doc = "Set the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM."]
1513    MAV_CMD_SET_MESSAGE_INTERVAL = 511,
1514    #[doc = "Request the target system(s) emit a single instance of a specified message (i.e. a \"one-shot\" version of MAV_CMD_SET_MESSAGE_INTERVAL)."]
1515    MAV_CMD_REQUEST_MESSAGE = 512,
1516    #[deprecated = " See `MAV_CMD_REQUEST_MESSAGE` (Deprecated since 2019-08)"]
1517    #[doc = "Request MAVLink protocol version compatibility. All receivers should ACK the command and then emit their capabilities in an PROTOCOL_VERSION message"]
1518    MAV_CMD_REQUEST_PROTOCOL_VERSION = 519,
1519    #[deprecated = " See `MAV_CMD_REQUEST_MESSAGE` (Deprecated since 2019-08)"]
1520    #[doc = "Request autopilot capabilities. The receiver should ACK the command and then emit its capabilities in an AUTOPILOT_VERSION message"]
1521    MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520,
1522    #[deprecated = " See `MAV_CMD_REQUEST_MESSAGE` (Deprecated since 2019-08)"]
1523    #[doc = "Request camera information (CAMERA_INFORMATION)."]
1524    MAV_CMD_REQUEST_CAMERA_INFORMATION = 521,
1525    #[deprecated = " See `MAV_CMD_REQUEST_MESSAGE` (Deprecated since 2019-08)"]
1526    #[doc = "Request camera settings (CAMERA_SETTINGS)."]
1527    MAV_CMD_REQUEST_CAMERA_SETTINGS = 522,
1528    #[deprecated = " See `MAV_CMD_REQUEST_MESSAGE` (Deprecated since 2019-08)"]
1529    #[doc = "Request storage information (STORAGE_INFORMATION). Use the command's target_component to target a specific component's storage."]
1530    MAV_CMD_REQUEST_STORAGE_INFORMATION = 525,
1531    #[doc = "Format a storage medium. Once format is complete, a STORAGE_INFORMATION message is sent. Use the command's target_component to target a specific component's storage."]
1532    MAV_CMD_STORAGE_FORMAT = 526,
1533    #[deprecated = " See `MAV_CMD_REQUEST_MESSAGE` (Deprecated since 2019-08)"]
1534    #[doc = "Request camera capture status (CAMERA_CAPTURE_STATUS)"]
1535    MAV_CMD_REQUEST_CAMERA_CAPTURE_STATUS = 527,
1536    #[deprecated = " See `MAV_CMD_REQUEST_MESSAGE` (Deprecated since 2019-08)"]
1537    #[doc = "Request flight information (FLIGHT_INFORMATION)"]
1538    MAV_CMD_REQUEST_FLIGHT_INFORMATION = 528,
1539    #[doc = "Reset all camera settings to Factory Default"]
1540    MAV_CMD_RESET_CAMERA_SETTINGS = 529,
1541    #[doc = "Set camera running mode. Use NaN for reserved values. GCS will send a MAV_CMD_REQUEST_VIDEO_STREAM_STATUS command after a mode change if the camera supports video streaming."]
1542    MAV_CMD_SET_CAMERA_MODE = 530,
1543    #[doc = "Set camera zoom. Camera must respond with a CAMERA_SETTINGS message (on success)."]
1544    MAV_CMD_SET_CAMERA_ZOOM = 531,
1545    #[doc = "Set camera focus. Camera must respond with a CAMERA_SETTINGS message (on success)."]
1546    MAV_CMD_SET_CAMERA_FOCUS = 532,
1547    #[doc = "Set that a particular storage is the preferred location for saving photos, videos, and/or other media (e.g. to set that an SD card is used for storing videos).           There can only be one preferred save location for each particular media type: setting a media usage flag will clear/reset that same flag if set on any other storage.           If no flag is set the system should use its default storage.           A target system can choose to always use default storage, in which case it should ACK the command with MAV_RESULT_UNSUPPORTED.           A target system can choose to not allow a particular storage to be set as preferred storage, in which case it should ACK the command with MAV_RESULT_DENIED."]
1548    MAV_CMD_SET_STORAGE_USAGE = 533,
1549    #[doc = "Set camera source. Changes the camera's active sources on cameras with multiple image sensors."]
1550    MAV_CMD_SET_CAMERA_SOURCE = 534,
1551    #[doc = "Tagged jump target. Can be jumped to with MAV_CMD_DO_JUMP_TAG."]
1552    MAV_CMD_JUMP_TAG = 600,
1553    #[doc = "Jump to the matching tag in the mission list. Repeat this action for the specified number of times. A mission should contain a single matching tag for each jump. If this is not the case then a jump to a missing tag should complete the mission, and a jump where there are multiple matching tags should always select the one with the lowest mission sequence number."]
1554    MAV_CMD_DO_JUMP_TAG = 601,
1555    #[doc = "Set gimbal manager pitch/yaw setpoints (low rate command). It is possible to set combinations of the values below. E.g. an angle as well as a desired angular rate can be used to get to this angle at a certain angular rate, or an angular rate only will result in continuous turning. NaN is to be used to signal unset. Note: only the gimbal manager will react to this command - it will be ignored by a gimbal device. Use GIMBAL_MANAGER_SET_PITCHYAW if you need to stream pitch/yaw setpoints at higher rate."]
1556    MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW = 1000,
1557    #[doc = "Gimbal configuration to set which sysid/compid is in primary and secondary control."]
1558    MAV_CMD_DO_GIMBAL_MANAGER_CONFIGURE = 1001,
1559    #[doc = "Start image capture sequence. CAMERA_IMAGE_CAPTURED must be emitted after each capture.            Param1 (id) may be used to specify the target camera: 0: all cameras, 1 to 6: autopilot-connected cameras, 7-255: MAVLink camera component ID.           It is needed in order to target specific cameras connected to the autopilot, or specific sensors in a multi-sensor camera (neither of which have a distinct MAVLink component ID).           It is also needed to specify the target camera in missions.            When used in a mission, an autopilot should execute the MAV_CMD for a specified local camera (param1 = 1-6), or resend it as a command if it is intended for a MAVLink camera (param1 = 7 - 255), setting the command's target_component as the param1 value (and setting param1 in the command to zero).           If the param1 is 0 the autopilot should do both.            When sent in a command the target MAVLink address is set using target_component.           If addressed specifically to an autopilot: param1 should be used in the same way as it is for missions (though command should NACK with MAV_RESULT_DENIED if a specified local camera does not exist).           If addressed to a MAVLink camera, param 1 can be used to address all cameras (0), or to separately address 1 to 7 individual sensors. Other values should be NACKed with MAV_RESULT_DENIED.           If the command is broadcast (target_component is 0) then param 1 should be set to 0 (any other value should be NACKED with MAV_RESULT_DENIED). An autopilot would trigger any local cameras and forward the command to all channels."]
1560    MAV_CMD_IMAGE_START_CAPTURE = 2000,
1561    #[doc = "Stop image capture sequence.            Param1 (id) may be used to specify the target camera: 0: all cameras, 1 to 6: autopilot-connected cameras, 7-255: MAVLink camera component ID.           It is needed in order to target specific cameras connected to the autopilot, or specific sensors in a multi-sensor camera (neither of which have a distinct MAVLink component ID).           It is also needed to specify the target camera in missions.            When used in a mission, an autopilot should execute the MAV_CMD for a specified local camera (param1 = 1-6), or resend it as a command if it is intended for a MAVLink camera (param1 = 7 - 255), setting the command's target_component as the param1 value (and setting param1 in the command to zero).           If the param1 is 0 the autopilot should do both.            When sent in a command the target MAVLink address is set using target_component.           If addressed specifically to an autopilot: param1 should be used in the same way as it is for missions (though command should NACK with MAV_RESULT_DENIED if a specified local camera does not exist).           If addressed to a MAVLink camera, param1 can be used to address all cameras (0), or to separately address 1 to 7 individual sensors. Other values should be NACKed with MAV_RESULT_DENIED.           If the command is broadcast (target_component is 0) then param 1 should be set to 0 (any other value should be NACKED with MAV_RESULT_DENIED). An autopilot would trigger any local cameras and forward the command to all channels."]
1562    MAV_CMD_IMAGE_STOP_CAPTURE = 2001,
1563    #[deprecated = " See `MAV_CMD_REQUEST_MESSAGE` (Deprecated since 2019-08)"]
1564    #[doc = "Re-request a CAMERA_IMAGE_CAPTURED message."]
1565    MAV_CMD_REQUEST_CAMERA_IMAGE_CAPTURE = 2002,
1566    #[doc = "Enable or disable on-board camera triggering system."]
1567    MAV_CMD_DO_TRIGGER_CONTROL = 2003,
1568    #[doc = "If the camera supports point visual tracking (CAMERA_CAP_FLAGS_HAS_TRACKING_POINT is set), this command allows to initiate the tracking."]
1569    MAV_CMD_CAMERA_TRACK_POINT = 2004,
1570    #[doc = "If the camera supports rectangle visual tracking (CAMERA_CAP_FLAGS_HAS_TRACKING_RECTANGLE is set), this command allows to initiate the tracking."]
1571    MAV_CMD_CAMERA_TRACK_RECTANGLE = 2005,
1572    #[doc = "Stops ongoing tracking."]
1573    MAV_CMD_CAMERA_STOP_TRACKING = 2010,
1574    #[doc = "Starts video capture (recording)."]
1575    MAV_CMD_VIDEO_START_CAPTURE = 2500,
1576    #[doc = "Stop the current video capture (recording)."]
1577    MAV_CMD_VIDEO_STOP_CAPTURE = 2501,
1578    #[doc = "Start video streaming"]
1579    MAV_CMD_VIDEO_START_STREAMING = 2502,
1580    #[doc = "Stop the given video stream"]
1581    MAV_CMD_VIDEO_STOP_STREAMING = 2503,
1582    #[deprecated = " See `MAV_CMD_REQUEST_MESSAGE` (Deprecated since 2019-08)"]
1583    #[doc = "Request video stream information (VIDEO_STREAM_INFORMATION)"]
1584    MAV_CMD_REQUEST_VIDEO_STREAM_INFORMATION = 2504,
1585    #[deprecated = " See `MAV_CMD_REQUEST_MESSAGE` (Deprecated since 2019-08)"]
1586    #[doc = "Request video stream status (VIDEO_STREAM_STATUS)"]
1587    MAV_CMD_REQUEST_VIDEO_STREAM_STATUS = 2505,
1588    #[doc = "Request to start streaming logging data over MAVLink (see also LOGGING_DATA message)"]
1589    MAV_CMD_LOGGING_START = 2510,
1590    #[doc = "Request to stop streaming log data over MAVLink"]
1591    MAV_CMD_LOGGING_STOP = 2511,
1592    MAV_CMD_AIRFRAME_CONFIGURATION = 2520,
1593    #[doc = "Request to start/stop transmitting over the high latency telemetry"]
1594    MAV_CMD_CONTROL_HIGH_LATENCY = 2600,
1595    #[doc = "Create a panorama at the current position"]
1596    MAV_CMD_PANORAMA_CREATE = 2800,
1597    #[doc = "Request VTOL transition"]
1598    MAV_CMD_DO_VTOL_TRANSITION = 3000,
1599    #[doc = "Request authorization to arm the vehicle to a external entity, the arm authorizer is responsible to request all data that is needs from the vehicle before authorize or deny the request. \t\tIf approved the COMMAND_ACK message progress field should be set with period of time that this authorization is valid in seconds. \t\tIf the authorization is denied COMMAND_ACK.result_param2 should be set with one of the reasons in ARM_AUTH_DENIED_REASON."]
1600    MAV_CMD_ARM_AUTHORIZATION_REQUEST = 3001,
1601    #[doc = "This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocities along all three axes."]
1602    MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000,
1603    #[doc = "This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position."]
1604    MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001,
1605    #[doc = "Delay mission state machine until gate has been reached."]
1606    MAV_CMD_CONDITION_GATE = 4501,
1607    #[doc = "Fence return point (there can only be one such point in a geofence definition). If rally points are supported they should be used instead."]
1608    MAV_CMD_NAV_FENCE_RETURN_POINT = 5000,
1609    #[doc = "Fence vertex for an inclusion polygon (the polygon must not be self-intersecting). The vehicle must stay within this area. Minimum of 3 vertices required.           The vertices for a polygon must be sent sequentially, each with param1 set to the total number of vertices in the polygon."]
1610    MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION = 5001,
1611    #[doc = "Fence vertex for an exclusion polygon (the polygon must not be self-intersecting). The vehicle must stay outside this area. Minimum of 3 vertices required.           The vertices for a polygon must be sent sequentially, each with param1 set to the total number of vertices in the polygon."]
1612    MAV_CMD_NAV_FENCE_POLYGON_VERTEX_EXCLUSION = 5002,
1613    #[doc = "Circular fence area. The vehicle must stay inside this area."]
1614    MAV_CMD_NAV_FENCE_CIRCLE_INCLUSION = 5003,
1615    #[doc = "Circular fence area. The vehicle must stay outside this area."]
1616    MAV_CMD_NAV_FENCE_CIRCLE_EXCLUSION = 5004,
1617    #[doc = "Rally point. You can have multiple rally points defined."]
1618    MAV_CMD_NAV_RALLY_POINT = 5100,
1619    #[doc = "Commands the vehicle to respond with a sequence of messages UAVCAN_NODE_INFO, one message per every UAVCAN node that is online. Note that some of the response messages can be lost, which the receiver can detect easily by checking whether every received UAVCAN_NODE_STATUS has a matching message UAVCAN_NODE_INFO received earlier; if not, this command should be sent again in order to request re-transmission of the node information messages."]
1620    MAV_CMD_UAVCAN_GET_NODE_INFO = 5200,
1621    #[doc = "Change state of safety switch."]
1622    MAV_CMD_DO_SET_SAFETY_SWITCH_STATE = 5300,
1623    #[doc = "Trigger the start of an ADSB-out IDENT. This should only be used when requested to do so by an Air Traffic Controller in controlled airspace. This starts the IDENT which is then typically held for 18 seconds by the hardware per the Mode A, C, and S transponder spec."]
1624    MAV_CMD_DO_ADSB_OUT_IDENT = 10001,
1625    #[deprecated = "  (Deprecated since 2021-06)"]
1626    #[doc = "Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity."]
1627    MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001,
1628    #[deprecated = "  (Deprecated since 2021-06)"]
1629    #[doc = "Control the payload deployment."]
1630    MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002,
1631    #[doc = "Magnetometer calibration based on provided known yaw. This allows for fast calibration using WMM field tables in the vehicle, given only the known yaw of the vehicle. If Latitude and longitude are both zero then use the current vehicle location."]
1632    MAV_CMD_FIXED_MAG_CAL_YAW = 42006,
1633    #[doc = "Command to operate winch."]
1634    MAV_CMD_DO_WINCH = 42600,
1635    #[doc = "Provide an external position estimate for use when dead-reckoning. This is meant to be used for occasional position resets that may be provided by a external system such as a remote pilot using landmarks over a video link."]
1636    MAV_CMD_EXTERNAL_POSITION_ESTIMATE = 43003,
1637    #[doc = "User defined waypoint item. Ground Station will show the Vehicle as flying through this item."]
1638    MAV_CMD_WAYPOINT_USER_1 = 31000,
1639    #[doc = "User defined waypoint item. Ground Station will show the Vehicle as flying through this item."]
1640    MAV_CMD_WAYPOINT_USER_2 = 31001,
1641    #[doc = "User defined waypoint item. Ground Station will show the Vehicle as flying through this item."]
1642    MAV_CMD_WAYPOINT_USER_3 = 31002,
1643    #[doc = "User defined waypoint item. Ground Station will show the Vehicle as flying through this item."]
1644    MAV_CMD_WAYPOINT_USER_4 = 31003,
1645    #[doc = "User defined waypoint item. Ground Station will show the Vehicle as flying through this item."]
1646    MAV_CMD_WAYPOINT_USER_5 = 31004,
1647    #[doc = "User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item."]
1648    MAV_CMD_SPATIAL_USER_1 = 31005,
1649    #[doc = "User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item."]
1650    MAV_CMD_SPATIAL_USER_2 = 31006,
1651    #[doc = "User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item."]
1652    MAV_CMD_SPATIAL_USER_3 = 31007,
1653    #[doc = "User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item."]
1654    MAV_CMD_SPATIAL_USER_4 = 31008,
1655    #[doc = "User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item."]
1656    MAV_CMD_SPATIAL_USER_5 = 31009,
1657    #[doc = "User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item."]
1658    MAV_CMD_USER_1 = 31010,
1659    #[doc = "User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item."]
1660    MAV_CMD_USER_2 = 31011,
1661    #[doc = "User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item."]
1662    MAV_CMD_USER_3 = 31012,
1663    #[doc = "User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item."]
1664    MAV_CMD_USER_4 = 31013,
1665    #[doc = "User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item."]
1666    MAV_CMD_USER_5 = 31014,
1667    #[doc = "Request forwarding of CAN packets from the given CAN bus to this component. CAN Frames are sent using CAN_FRAME and CANFD_FRAME messages"]
1668    MAV_CMD_CAN_FORWARD = 32000,
1669}
1670impl MavCmd {
1671    pub const DEFAULT: Self = Self::MAV_CMD_NAV_WAYPOINT;
1672}
1673impl Default for MavCmd {
1674    fn default() -> Self {
1675        Self::DEFAULT
1676    }
1677}
1678#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1679#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1680#[cfg_attr(feature = "serde", serde(tag = "type"))]
1681#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1682#[repr(u32)]
1683#[doc = "Possible actions an aircraft can take to avoid a collision."]
1684pub enum MavCollisionAction {
1685    #[doc = "Ignore any potential collisions"]
1686    MAV_COLLISION_ACTION_NONE = 0,
1687    #[doc = "Report potential collision"]
1688    MAV_COLLISION_ACTION_REPORT = 1,
1689    #[doc = "Ascend or Descend to avoid threat"]
1690    MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2,
1691    #[doc = "Move horizontally to avoid threat"]
1692    MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3,
1693    #[doc = "Aircraft to move perpendicular to the collision's velocity vector"]
1694    MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4,
1695    #[doc = "Aircraft to fly directly back to its launch point"]
1696    MAV_COLLISION_ACTION_RTL = 5,
1697    #[doc = "Aircraft to stop in place"]
1698    MAV_COLLISION_ACTION_HOVER = 6,
1699}
1700impl MavCollisionAction {
1701    pub const DEFAULT: Self = Self::MAV_COLLISION_ACTION_NONE;
1702}
1703impl Default for MavCollisionAction {
1704    fn default() -> Self {
1705        Self::DEFAULT
1706    }
1707}
1708#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1709#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1710#[cfg_attr(feature = "serde", serde(tag = "type"))]
1711#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1712#[repr(u32)]
1713#[doc = "Source of information about this collision."]
1714pub enum MavCollisionSrc {
1715    #[doc = "ID field references ADSB_VEHICLE packets"]
1716    MAV_COLLISION_SRC_ADSB = 0,
1717    #[doc = "ID field references MAVLink SRC ID"]
1718    MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1,
1719}
1720impl MavCollisionSrc {
1721    pub const DEFAULT: Self = Self::MAV_COLLISION_SRC_ADSB;
1722}
1723impl Default for MavCollisionSrc {
1724    fn default() -> Self {
1725        Self::DEFAULT
1726    }
1727}
1728#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1729#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1730#[cfg_attr(feature = "serde", serde(tag = "type"))]
1731#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1732#[repr(u32)]
1733#[doc = "Aircraft-rated danger from this threat."]
1734pub enum MavCollisionThreatLevel {
1735    #[doc = "Not a threat"]
1736    MAV_COLLISION_THREAT_LEVEL_NONE = 0,
1737    #[doc = "Craft is mildly concerned about this threat"]
1738    MAV_COLLISION_THREAT_LEVEL_LOW = 1,
1739    #[doc = "Craft is panicking, and may take actions to avoid threat"]
1740    MAV_COLLISION_THREAT_LEVEL_HIGH = 2,
1741}
1742impl MavCollisionThreatLevel {
1743    pub const DEFAULT: Self = Self::MAV_COLLISION_THREAT_LEVEL_NONE;
1744}
1745impl Default for MavCollisionThreatLevel {
1746    fn default() -> Self {
1747        Self::DEFAULT
1748    }
1749}
1750#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
1751#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1752#[cfg_attr(feature = "serde", serde(tag = "type"))]
1753#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1754#[repr(u32)]
1755#[doc = "Component ids (values) for the different types and instances of onboard hardware/software that might make up a MAVLink system (autopilot, cameras, servos, GPS systems, avoidance systems etc.).       Components must use the appropriate ID in their source address when sending messages. Components can also use IDs to determine if they are the intended recipient of an incoming message. The MAV_COMP_ID_ALL value is used to indicate messages that must be processed by all components.       When creating new entries, components that can have multiple instances (e.g. cameras, servos etc.) should be allocated sequential values. An appropriate number of values should be left free after these components to allow the number of instances to be expanded."]
1756pub enum MavComponent {
1757    #[doc = "Target id (target_component) used to broadcast messages to all components of the receiving system. Components should attempt to process messages with this component ID and forward to components on any other interfaces. Note: This is not a valid *source* component id for a message."]
1758    MAV_COMP_ID_ALL = 0,
1759    #[doc = "System flight controller component (\"autopilot\"). Only one autopilot is expected in a particular system."]
1760    MAV_COMP_ID_AUTOPILOT1 = 1,
1761    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1762    MAV_COMP_ID_USER1 = 25,
1763    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1764    MAV_COMP_ID_USER2 = 26,
1765    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1766    MAV_COMP_ID_USER3 = 27,
1767    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1768    MAV_COMP_ID_USER4 = 28,
1769    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1770    MAV_COMP_ID_USER5 = 29,
1771    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1772    MAV_COMP_ID_USER6 = 30,
1773    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1774    MAV_COMP_ID_USER7 = 31,
1775    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1776    MAV_COMP_ID_USER8 = 32,
1777    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1778    MAV_COMP_ID_USER9 = 33,
1779    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1780    MAV_COMP_ID_USER10 = 34,
1781    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1782    MAV_COMP_ID_USER11 = 35,
1783    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1784    MAV_COMP_ID_USER12 = 36,
1785    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1786    MAV_COMP_ID_USER13 = 37,
1787    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1788    MAV_COMP_ID_USER14 = 38,
1789    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1790    MAV_COMP_ID_USER15 = 39,
1791    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1792    MAV_COMP_ID_USER16 = 40,
1793    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1794    MAV_COMP_ID_USER17 = 41,
1795    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1796    MAV_COMP_ID_USER18 = 42,
1797    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1798    MAV_COMP_ID_USER19 = 43,
1799    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1800    MAV_COMP_ID_USER20 = 44,
1801    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1802    MAV_COMP_ID_USER21 = 45,
1803    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1804    MAV_COMP_ID_USER22 = 46,
1805    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1806    MAV_COMP_ID_USER23 = 47,
1807    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1808    MAV_COMP_ID_USER24 = 48,
1809    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1810    MAV_COMP_ID_USER25 = 49,
1811    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1812    MAV_COMP_ID_USER26 = 50,
1813    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1814    MAV_COMP_ID_USER27 = 51,
1815    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1816    MAV_COMP_ID_USER28 = 52,
1817    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1818    MAV_COMP_ID_USER29 = 53,
1819    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1820    MAV_COMP_ID_USER30 = 54,
1821    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1822    MAV_COMP_ID_USER31 = 55,
1823    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1824    MAV_COMP_ID_USER32 = 56,
1825    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1826    MAV_COMP_ID_USER33 = 57,
1827    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1828    MAV_COMP_ID_USER34 = 58,
1829    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1830    MAV_COMP_ID_USER35 = 59,
1831    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1832    MAV_COMP_ID_USER36 = 60,
1833    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1834    MAV_COMP_ID_USER37 = 61,
1835    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1836    MAV_COMP_ID_USER38 = 62,
1837    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1838    MAV_COMP_ID_USER39 = 63,
1839    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1840    MAV_COMP_ID_USER40 = 64,
1841    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1842    MAV_COMP_ID_USER41 = 65,
1843    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1844    MAV_COMP_ID_USER42 = 66,
1845    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1846    MAV_COMP_ID_USER43 = 67,
1847    #[doc = "Telemetry radio (e.g. SiK radio, or other component that emits RADIO_STATUS messages)."]
1848    MAV_COMP_ID_TELEMETRY_RADIO = 68,
1849    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1850    MAV_COMP_ID_USER45 = 69,
1851    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1852    MAV_COMP_ID_USER46 = 70,
1853    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1854    MAV_COMP_ID_USER47 = 71,
1855    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1856    MAV_COMP_ID_USER48 = 72,
1857    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1858    MAV_COMP_ID_USER49 = 73,
1859    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1860    MAV_COMP_ID_USER50 = 74,
1861    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1862    MAV_COMP_ID_USER51 = 75,
1863    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1864    MAV_COMP_ID_USER52 = 76,
1865    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1866    MAV_COMP_ID_USER53 = 77,
1867    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1868    MAV_COMP_ID_USER54 = 78,
1869    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1870    MAV_COMP_ID_USER55 = 79,
1871    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1872    MAV_COMP_ID_USER56 = 80,
1873    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1874    MAV_COMP_ID_USER57 = 81,
1875    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1876    MAV_COMP_ID_USER58 = 82,
1877    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1878    MAV_COMP_ID_USER59 = 83,
1879    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1880    MAV_COMP_ID_USER60 = 84,
1881    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1882    MAV_COMP_ID_USER61 = 85,
1883    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1884    MAV_COMP_ID_USER62 = 86,
1885    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1886    MAV_COMP_ID_USER63 = 87,
1887    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1888    MAV_COMP_ID_USER64 = 88,
1889    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1890    MAV_COMP_ID_USER65 = 89,
1891    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1892    MAV_COMP_ID_USER66 = 90,
1893    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1894    MAV_COMP_ID_USER67 = 91,
1895    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1896    MAV_COMP_ID_USER68 = 92,
1897    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1898    MAV_COMP_ID_USER69 = 93,
1899    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1900    MAV_COMP_ID_USER70 = 94,
1901    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1902    MAV_COMP_ID_USER71 = 95,
1903    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1904    MAV_COMP_ID_USER72 = 96,
1905    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1906    MAV_COMP_ID_USER73 = 97,
1907    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1908    MAV_COMP_ID_USER74 = 98,
1909    #[doc = "Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network."]
1910    MAV_COMP_ID_USER75 = 99,
1911    #[doc = "Camera #1."]
1912    MAV_COMP_ID_CAMERA = 100,
1913    #[doc = "Camera #2."]
1914    MAV_COMP_ID_CAMERA2 = 101,
1915    #[doc = "Camera #3."]
1916    MAV_COMP_ID_CAMERA3 = 102,
1917    #[doc = "Camera #4."]
1918    MAV_COMP_ID_CAMERA4 = 103,
1919    #[doc = "Camera #5."]
1920    MAV_COMP_ID_CAMERA5 = 104,
1921    #[doc = "Camera #6."]
1922    MAV_COMP_ID_CAMERA6 = 105,
1923    #[doc = "Servo #1."]
1924    MAV_COMP_ID_SERVO1 = 140,
1925    #[doc = "Servo #2."]
1926    MAV_COMP_ID_SERVO2 = 141,
1927    #[doc = "Servo #3."]
1928    MAV_COMP_ID_SERVO3 = 142,
1929    #[doc = "Servo #4."]
1930    MAV_COMP_ID_SERVO4 = 143,
1931    #[doc = "Servo #5."]
1932    MAV_COMP_ID_SERVO5 = 144,
1933    #[doc = "Servo #6."]
1934    MAV_COMP_ID_SERVO6 = 145,
1935    #[doc = "Servo #7."]
1936    MAV_COMP_ID_SERVO7 = 146,
1937    #[doc = "Servo #8."]
1938    MAV_COMP_ID_SERVO8 = 147,
1939    #[doc = "Servo #9."]
1940    MAV_COMP_ID_SERVO9 = 148,
1941    #[doc = "Servo #10."]
1942    MAV_COMP_ID_SERVO10 = 149,
1943    #[doc = "Servo #11."]
1944    MAV_COMP_ID_SERVO11 = 150,
1945    #[doc = "Servo #12."]
1946    MAV_COMP_ID_SERVO12 = 151,
1947    #[doc = "Servo #13."]
1948    MAV_COMP_ID_SERVO13 = 152,
1949    #[doc = "Servo #14."]
1950    MAV_COMP_ID_SERVO14 = 153,
1951    #[doc = "Gimbal #1."]
1952    MAV_COMP_ID_GIMBAL = 154,
1953    #[doc = "Logging component."]
1954    MAV_COMP_ID_LOG = 155,
1955    #[doc = "Automatic Dependent Surveillance-Broadcast (ADS-B) component."]
1956    MAV_COMP_ID_ADSB = 156,
1957    #[doc = "On Screen Display (OSD) devices for video links."]
1958    MAV_COMP_ID_OSD = 157,
1959    #[doc = "Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter microservice."]
1960    MAV_COMP_ID_PERIPHERAL = 158,
1961    #[deprecated = "All gimbals should use MAV_COMP_ID_GIMBAL. See `MAV_COMP_ID_GIMBAL` (Deprecated since 2018-11)"]
1962    #[doc = "Gimbal ID for QX1."]
1963    MAV_COMP_ID_QX1_GIMBAL = 159,
1964    #[doc = "FLARM collision alert component."]
1965    MAV_COMP_ID_FLARM = 160,
1966    #[doc = "Parachute component."]
1967    MAV_COMP_ID_PARACHUTE = 161,
1968    #[doc = "Winch component."]
1969    MAV_COMP_ID_WINCH = 169,
1970    #[doc = "Gimbal #2."]
1971    MAV_COMP_ID_GIMBAL2 = 171,
1972    #[doc = "Gimbal #3."]
1973    MAV_COMP_ID_GIMBAL3 = 172,
1974    #[doc = "Gimbal #4"]
1975    MAV_COMP_ID_GIMBAL4 = 173,
1976    #[doc = "Gimbal #5."]
1977    MAV_COMP_ID_GIMBAL5 = 174,
1978    #[doc = "Gimbal #6."]
1979    MAV_COMP_ID_GIMBAL6 = 175,
1980    #[doc = "Battery #1."]
1981    MAV_COMP_ID_BATTERY = 180,
1982    #[doc = "Battery #2."]
1983    MAV_COMP_ID_BATTERY2 = 181,
1984    #[doc = "CAN over MAVLink client."]
1985    MAV_COMP_ID_MAVCAN = 189,
1986    #[doc = "Component that can generate/supply a mission flight plan (e.g. GCS or developer API)."]
1987    MAV_COMP_ID_MISSIONPLANNER = 190,
1988    #[doc = "Component that lives on the onboard computer (companion computer) and has some generic functionalities, such as settings system parameters and monitoring the status of some processes that don't directly speak mavlink and so on."]
1989    MAV_COMP_ID_ONBOARD_COMPUTER = 191,
1990    #[doc = "Component that lives on the onboard computer (companion computer) and has some generic functionalities, such as settings system parameters and monitoring the status of some processes that don't directly speak mavlink and so on."]
1991    MAV_COMP_ID_ONBOARD_COMPUTER2 = 192,
1992    #[doc = "Component that lives on the onboard computer (companion computer) and has some generic functionalities, such as settings system parameters and monitoring the status of some processes that don't directly speak mavlink and so on."]
1993    MAV_COMP_ID_ONBOARD_COMPUTER3 = 193,
1994    #[doc = "Component that lives on the onboard computer (companion computer) and has some generic functionalities, such as settings system parameters and monitoring the status of some processes that don't directly speak mavlink and so on."]
1995    MAV_COMP_ID_ONBOARD_COMPUTER4 = 194,
1996    #[doc = "Component that finds an optimal path between points based on a certain constraint (e.g. minimum snap, shortest path, cost, etc.)."]
1997    MAV_COMP_ID_PATHPLANNER = 195,
1998    #[doc = "Component that plans a collision free path between two points."]
1999    MAV_COMP_ID_OBSTACLE_AVOIDANCE = 196,
2000    #[doc = "Component that provides position estimates using VIO techniques."]
2001    MAV_COMP_ID_VISUAL_INERTIAL_ODOMETRY = 197,
2002    #[doc = "Component that manages pairing of vehicle and GCS."]
2003    MAV_COMP_ID_PAIRING_MANAGER = 198,
2004    #[doc = "Inertial Measurement Unit (IMU) #1."]
2005    MAV_COMP_ID_IMU = 200,
2006    #[doc = "Inertial Measurement Unit (IMU) #2."]
2007    MAV_COMP_ID_IMU_2 = 201,
2008    #[doc = "Inertial Measurement Unit (IMU) #3."]
2009    MAV_COMP_ID_IMU_3 = 202,
2010    #[doc = "GPS #1."]
2011    MAV_COMP_ID_GPS = 220,
2012    #[doc = "GPS #2."]
2013    MAV_COMP_ID_GPS2 = 221,
2014    #[doc = "Open Drone ID transmitter/receiver (Bluetooth/WiFi/Internet)."]
2015    MAV_COMP_ID_ODID_TXRX_1 = 236,
2016    #[doc = "Open Drone ID transmitter/receiver (Bluetooth/WiFi/Internet)."]
2017    MAV_COMP_ID_ODID_TXRX_2 = 237,
2018    #[doc = "Open Drone ID transmitter/receiver (Bluetooth/WiFi/Internet)."]
2019    MAV_COMP_ID_ODID_TXRX_3 = 238,
2020    #[doc = "Component to bridge MAVLink to UDP (i.e. from a UART)."]
2021    MAV_COMP_ID_UDP_BRIDGE = 240,
2022    #[doc = "Component to bridge to UART (i.e. from UDP)."]
2023    MAV_COMP_ID_UART_BRIDGE = 241,
2024    #[doc = "Component handling TUNNEL messages (e.g. vendor specific GUI of a component)."]
2025    MAV_COMP_ID_TUNNEL_NODE = 242,
2026    #[doc = "Illuminator"]
2027    MAV_COMP_ID_ILLUMINATOR = 243,
2028    #[deprecated = "System control does not require a separate component ID. Instead, system commands should be sent with target_component=MAV_COMP_ID_ALL allowing the target component to use any appropriate component id. See `MAV_COMP_ID_ALL` (Deprecated since 2018-11)"]
2029    #[doc = "Deprecated, don't use. Component for handling system messages (e.g. to ARM, takeoff, etc.)."]
2030    MAV_COMP_ID_SYSTEM_CONTROL = 250,
2031}
2032impl MavComponent {
2033    pub const DEFAULT: Self = Self::MAV_COMP_ID_ALL;
2034}
2035impl Default for MavComponent {
2036    fn default() -> Self {
2037        Self::DEFAULT
2038    }
2039}
2040#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2041#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2042#[cfg_attr(feature = "serde", serde(tag = "type"))]
2043#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2044#[repr(u32)]
2045#[deprecated = " See `MESSAGE_INTERVAL` (Deprecated since 2015-06)"]
2046#[doc = "A data stream is not a fixed set of messages, but rather a      recommendation to the autopilot software. Individual autopilots may or may not obey      the recommended messages."]
2047pub enum MavDataStream {
2048    #[doc = "Enable all data streams"]
2049    MAV_DATA_STREAM_ALL = 0,
2050    #[doc = "Enable IMU_RAW, GPS_RAW, GPS_STATUS packets."]
2051    MAV_DATA_STREAM_RAW_SENSORS = 1,
2052    #[doc = "Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS"]
2053    MAV_DATA_STREAM_EXTENDED_STATUS = 2,
2054    #[doc = "Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW"]
2055    MAV_DATA_STREAM_RC_CHANNELS = 3,
2056    #[doc = "Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT."]
2057    MAV_DATA_STREAM_RAW_CONTROLLER = 4,
2058    #[doc = "Enable LOCAL_POSITION, GLOBAL_POSITION_INT messages."]
2059    MAV_DATA_STREAM_POSITION = 6,
2060    #[doc = "Dependent on the autopilot"]
2061    MAV_DATA_STREAM_EXTRA1 = 10,
2062    #[doc = "Dependent on the autopilot"]
2063    MAV_DATA_STREAM_EXTRA2 = 11,
2064    #[doc = "Dependent on the autopilot"]
2065    MAV_DATA_STREAM_EXTRA3 = 12,
2066}
2067impl MavDataStream {
2068    pub const DEFAULT: Self = Self::MAV_DATA_STREAM_ALL;
2069}
2070impl Default for MavDataStream {
2071    fn default() -> Self {
2072        Self::DEFAULT
2073    }
2074}
2075#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2076#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2077#[cfg_attr(feature = "serde", serde(tag = "type"))]
2078#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2079#[repr(u32)]
2080#[doc = "Enumeration of distance sensor types"]
2081pub enum MavDistanceSensor {
2082    #[doc = "Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units"]
2083    MAV_DISTANCE_SENSOR_LASER = 0,
2084    #[doc = "Ultrasound rangefinder, e.g. MaxBotix units"]
2085    MAV_DISTANCE_SENSOR_ULTRASOUND = 1,
2086    #[doc = "Infrared rangefinder, e.g. Sharp units"]
2087    MAV_DISTANCE_SENSOR_INFRARED = 2,
2088    #[doc = "Radar type, e.g. uLanding units"]
2089    MAV_DISTANCE_SENSOR_RADAR = 3,
2090    #[doc = "Broken or unknown type, e.g. analog units"]
2091    MAV_DISTANCE_SENSOR_UNKNOWN = 4,
2092}
2093impl MavDistanceSensor {
2094    pub const DEFAULT: Self = Self::MAV_DISTANCE_SENSOR_LASER;
2095}
2096impl Default for MavDistanceSensor {
2097    fn default() -> Self {
2098        Self::DEFAULT
2099    }
2100}
2101#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2102#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2103#[cfg_attr(feature = "serde", serde(tag = "type"))]
2104#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2105#[repr(u32)]
2106#[doc = "Bitmap of options for the MAV_CMD_DO_REPOSITION"]
2107pub enum MavDoRepositionFlags {
2108    #[doc = "The aircraft should immediately transition into guided. This should not be set for follow me applications"]
2109    MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1,
2110}
2111impl MavDoRepositionFlags {
2112    pub const DEFAULT: Self = Self::MAV_DO_REPOSITION_FLAGS_CHANGE_MODE;
2113}
2114impl Default for MavDoRepositionFlags {
2115    fn default() -> Self {
2116        Self::DEFAULT
2117    }
2118}
2119#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2120#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2121#[cfg_attr(feature = "serde", serde(tag = "type"))]
2122#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2123#[repr(u32)]
2124#[doc = "Enumeration of estimator types"]
2125pub enum MavEstimatorType {
2126    #[doc = "Unknown type of the estimator."]
2127    MAV_ESTIMATOR_TYPE_UNKNOWN = 0,
2128    #[doc = "This is a naive estimator without any real covariance feedback."]
2129    MAV_ESTIMATOR_TYPE_NAIVE = 1,
2130    #[doc = "Computer vision based estimate. Might be up to scale."]
2131    MAV_ESTIMATOR_TYPE_VISION = 2,
2132    #[doc = "Visual-inertial estimate."]
2133    MAV_ESTIMATOR_TYPE_VIO = 3,
2134    #[doc = "Plain GPS estimate."]
2135    MAV_ESTIMATOR_TYPE_GPS = 4,
2136    #[doc = "Estimator integrating GPS and inertial sensing."]
2137    MAV_ESTIMATOR_TYPE_GPS_INS = 5,
2138    #[doc = "Estimate from external motion capturing system."]
2139    MAV_ESTIMATOR_TYPE_MOCAP = 6,
2140    #[doc = "Estimator based on lidar sensor input."]
2141    MAV_ESTIMATOR_TYPE_LIDAR = 7,
2142    #[doc = "Estimator on autopilot."]
2143    MAV_ESTIMATOR_TYPE_AUTOPILOT = 8,
2144}
2145impl MavEstimatorType {
2146    pub const DEFAULT: Self = Self::MAV_ESTIMATOR_TYPE_UNKNOWN;
2147}
2148impl Default for MavEstimatorType {
2149    fn default() -> Self {
2150        Self::DEFAULT
2151    }
2152}
2153#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2154#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2155#[cfg_attr(feature = "serde", serde(tag = "type"))]
2156#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2157#[repr(u32)]
2158#[doc = "Flags for CURRENT_EVENT_SEQUENCE."]
2159pub enum MavEventCurrentSequenceFlags {
2160    #[doc = "A sequence reset has happened (e.g. vehicle reboot)."]
2161    MAV_EVENT_CURRENT_SEQUENCE_FLAGS_RESET = 1,
2162}
2163impl MavEventCurrentSequenceFlags {
2164    pub const DEFAULT: Self = Self::MAV_EVENT_CURRENT_SEQUENCE_FLAGS_RESET;
2165}
2166impl Default for MavEventCurrentSequenceFlags {
2167    fn default() -> Self {
2168        Self::DEFAULT
2169    }
2170}
2171#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2172#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2173#[cfg_attr(feature = "serde", serde(tag = "type"))]
2174#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2175#[repr(u32)]
2176#[doc = "Reason for an event error response."]
2177pub enum MavEventErrorReason {
2178    #[doc = "The requested event is not available (anymore)."]
2179    MAV_EVENT_ERROR_REASON_UNAVAILABLE = 0,
2180}
2181impl MavEventErrorReason {
2182    pub const DEFAULT: Self = Self::MAV_EVENT_ERROR_REASON_UNAVAILABLE;
2183}
2184impl Default for MavEventErrorReason {
2185    fn default() -> Self {
2186        Self::DEFAULT
2187    }
2188}
2189#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2190#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2191#[cfg_attr(feature = "serde", serde(tag = "type"))]
2192#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2193#[repr(u32)]
2194#[doc = "Coordinate frames used by MAVLink. Not all frames are supported by all commands, messages, or vehicles.        Global frames use the following naming conventions:       - \"GLOBAL\": Global coordinate frame with WGS84 latitude/longitude and altitude positive over mean sea level (MSL) by default.         The following modifiers may be used with \"GLOBAL\":         - \"RELATIVE_ALT\": Altitude is relative to the vehicle home position rather than MSL.         - \"TERRAIN_ALT\": Altitude is relative to ground level rather than MSL.         - \"INT\": Latitude/longitude (in degrees) are scaled by multiplying by 1E7.        Local frames use the following naming conventions:       - \"LOCAL\": Origin of local frame is fixed relative to earth. Unless otherwise specified this origin is the origin of the vehicle position-estimator (\"EKF\").       - \"BODY\": Origin of local frame travels with the vehicle. NOTE, \"BODY\" does NOT indicate alignment of frame axis with vehicle attitude.       - \"OFFSET\": Deprecated synonym for \"BODY\" (origin travels with the vehicle). Not to be used for new frames.        Some deprecated frames do not follow these conventions (e.g. MAV_FRAME_BODY_NED and MAV_FRAME_BODY_OFFSET_NED)."]
2195pub enum MavFrame {
2196    #[doc = "Global (WGS84) coordinate frame + altitude relative to mean sea level (MSL)."]
2197    MAV_FRAME_GLOBAL = 0,
2198    #[doc = "NED local tangent frame (x: North, y: East, z: Down) with origin fixed relative to earth."]
2199    MAV_FRAME_LOCAL_NED = 1,
2200    #[doc = "NOT a coordinate frame, indicates a mission command."]
2201    MAV_FRAME_MISSION = 2,
2202    #[doc = "Global (WGS84) coordinate frame + altitude relative to the home position."]
2203    MAV_FRAME_GLOBAL_RELATIVE_ALT = 3,
2204    #[doc = "ENU local tangent frame (x: East, y: North, z: Up) with origin fixed relative to earth."]
2205    MAV_FRAME_LOCAL_ENU = 4,
2206    #[deprecated = "Use MAV_FRAME_GLOBAL in COMMAND_INT (and elsewhere) as a synonymous replacement. See `MAV_FRAME_GLOBAL` (Deprecated since 2024-03)"]
2207    #[doc = "Global (WGS84) coordinate frame (scaled) + altitude relative to mean sea level (MSL)."]
2208    MAV_FRAME_GLOBAL_INT = 5,
2209    #[deprecated = "Use MAV_FRAME_GLOBAL_RELATIVE_ALT in COMMAND_INT (and elsewhere) as a synonymous replacement. See `MAV_FRAME_GLOBAL_RELATIVE_ALT` (Deprecated since 2024-03)"]
2210    #[doc = "Global (WGS84) coordinate frame (scaled) + altitude relative to the home position."]
2211    MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6,
2212    #[doc = "NED local tangent frame (x: North, y: East, z: Down) with origin that travels with the vehicle."]
2213    MAV_FRAME_LOCAL_OFFSET_NED = 7,
2214    #[deprecated = " See `MAV_FRAME_BODY_FRD` (Deprecated since 2019-08)"]
2215    #[doc = "Same as MAV_FRAME_LOCAL_NED when used to represent position values. Same as MAV_FRAME_BODY_FRD when used with velocity/acceleration values."]
2216    MAV_FRAME_BODY_NED = 8,
2217    #[deprecated = " See `MAV_FRAME_BODY_FRD` (Deprecated since 2019-08)"]
2218    #[doc = "This is the same as MAV_FRAME_BODY_FRD."]
2219    MAV_FRAME_BODY_OFFSET_NED = 9,
2220    #[doc = "Global (WGS84) coordinate frame with AGL altitude (altitude at ground level)."]
2221    MAV_FRAME_GLOBAL_TERRAIN_ALT = 10,
2222    #[deprecated = "Use MAV_FRAME_GLOBAL_TERRAIN_ALT in COMMAND_INT (and elsewhere) as a synonymous replacement. See `MAV_FRAME_GLOBAL_TERRAIN_ALT` (Deprecated since 2024-03)"]
2223    #[doc = "Global (WGS84) coordinate frame (scaled) with AGL altitude (altitude at ground level)."]
2224    MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11,
2225    #[doc = "FRD local frame aligned to the vehicle's attitude (x: Forward, y: Right, z: Down) with an origin that travels with vehicle."]
2226    MAV_FRAME_BODY_FRD = 12,
2227    #[deprecated = "  (Deprecated since 2019-04)"]
2228    #[doc = "MAV_FRAME_BODY_FLU - Body fixed frame of reference, Z-up (x: Forward, y: Left, z: Up)."]
2229    MAV_FRAME_RESERVED_13 = 13,
2230    #[deprecated = " See `MAV_FRAME_LOCAL_FRD` (Deprecated since 2019-04)"]
2231    #[doc = "MAV_FRAME_MOCAP_NED - Odometry local coordinate frame of data given by a motion capture system, Z-down (x: North, y: East, z: Down)."]
2232    MAV_FRAME_RESERVED_14 = 14,
2233    #[deprecated = " See `MAV_FRAME_LOCAL_FLU` (Deprecated since 2019-04)"]
2234    #[doc = "MAV_FRAME_MOCAP_ENU - Odometry local coordinate frame of data given by a motion capture system, Z-up (x: East, y: North, z: Up)."]
2235    MAV_FRAME_RESERVED_15 = 15,
2236    #[deprecated = " See `MAV_FRAME_LOCAL_FRD` (Deprecated since 2019-04)"]
2237    #[doc = "MAV_FRAME_VISION_NED - Odometry local coordinate frame of data given by a vision estimation system, Z-down (x: North, y: East, z: Down)."]
2238    MAV_FRAME_RESERVED_16 = 16,
2239    #[deprecated = " See `MAV_FRAME_LOCAL_FLU` (Deprecated since 2019-04)"]
2240    #[doc = "MAV_FRAME_VISION_ENU - Odometry local coordinate frame of data given by a vision estimation system, Z-up (x: East, y: North, z: Up)."]
2241    MAV_FRAME_RESERVED_17 = 17,
2242    #[deprecated = " See `MAV_FRAME_LOCAL_FRD` (Deprecated since 2019-04)"]
2243    #[doc = "MAV_FRAME_ESTIM_NED - Odometry local coordinate frame of data given by an estimator running onboard the vehicle, Z-down (x: North, y: East, z: Down)."]
2244    MAV_FRAME_RESERVED_18 = 18,
2245    #[deprecated = " See `MAV_FRAME_LOCAL_FLU` (Deprecated since 2019-04)"]
2246    #[doc = "MAV_FRAME_ESTIM_ENU - Odometry local coordinate frame of data given by an estimator running onboard the vehicle, Z-up (x: East, y: North, z: Up)."]
2247    MAV_FRAME_RESERVED_19 = 19,
2248    #[doc = "FRD local tangent frame (x: Forward, y: Right, z: Down) with origin fixed relative to earth. The forward axis is aligned to the front of the vehicle in the horizontal plane."]
2249    MAV_FRAME_LOCAL_FRD = 20,
2250    #[doc = "FLU local tangent frame (x: Forward, y: Left, z: Up) with origin fixed relative to earth. The forward axis is aligned to the front of the vehicle in the horizontal plane."]
2251    MAV_FRAME_LOCAL_FLU = 21,
2252}
2253impl MavFrame {
2254    pub const DEFAULT: Self = Self::MAV_FRAME_GLOBAL;
2255}
2256impl Default for MavFrame {
2257    fn default() -> Self {
2258        Self::DEFAULT
2259    }
2260}
2261#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2262#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2263#[cfg_attr(feature = "serde", serde(tag = "type"))]
2264#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2265#[repr(u32)]
2266#[doc = "MAV FTP error codes (<https://mavlink.io/en/services/ftp.html>)"]
2267pub enum MavFtpErr {
2268    #[doc = "None: No error"]
2269    MAV_FTP_ERR_NONE = 0,
2270    #[doc = "Fail: Unknown failure"]
2271    MAV_FTP_ERR_FAIL = 1,
2272    #[doc = "FailErrno: Command failed, Err number sent back in PayloadHeader.data[1]. \t\tThis is a file-system error number understood by the server operating system."]
2273    MAV_FTP_ERR_FAILERRNO = 2,
2274    #[doc = "InvalidDataSize: Payload size is invalid"]
2275    MAV_FTP_ERR_INVALIDDATASIZE = 3,
2276    #[doc = "InvalidSession: Session is not currently open"]
2277    MAV_FTP_ERR_INVALIDSESSION = 4,
2278    #[doc = "NoSessionsAvailable: All available sessions are already in use"]
2279    MAV_FTP_ERR_NOSESSIONSAVAILABLE = 5,
2280    #[doc = "EOF: Offset past end of file for ListDirectory and ReadFile commands"]
2281    MAV_FTP_ERR_EOF = 6,
2282    #[doc = "UnknownCommand: Unknown command / opcode"]
2283    MAV_FTP_ERR_UNKNOWNCOMMAND = 7,
2284    #[doc = "FileExists: File/directory already exists"]
2285    MAV_FTP_ERR_FILEEXISTS = 8,
2286    #[doc = "FileProtected: File/directory is write protected"]
2287    MAV_FTP_ERR_FILEPROTECTED = 9,
2288    #[doc = "FileNotFound: File/directory not found"]
2289    MAV_FTP_ERR_FILENOTFOUND = 10,
2290}
2291impl MavFtpErr {
2292    pub const DEFAULT: Self = Self::MAV_FTP_ERR_NONE;
2293}
2294impl Default for MavFtpErr {
2295    fn default() -> Self {
2296        Self::DEFAULT
2297    }
2298}
2299#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2300#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2301#[cfg_attr(feature = "serde", serde(tag = "type"))]
2302#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2303#[repr(u32)]
2304#[doc = "MAV FTP opcodes: <https://mavlink.io/en/services/ftp.html>"]
2305pub enum MavFtpOpcode {
2306    #[doc = "None. Ignored, always ACKed"]
2307    MAV_FTP_OPCODE_NONE = 0,
2308    #[doc = "TerminateSession: Terminates open Read session"]
2309    MAV_FTP_OPCODE_TERMINATESESSION = 1,
2310    #[doc = "ResetSessions: Terminates all open read sessions"]
2311    MAV_FTP_OPCODE_RESETSESSION = 2,
2312    #[doc = "ListDirectory. List files and directories in path from offset"]
2313    MAV_FTP_OPCODE_LISTDIRECTORY = 3,
2314    #[doc = "OpenFileRO: Opens file at path for reading, returns session"]
2315    MAV_FTP_OPCODE_OPENFILERO = 4,
2316    #[doc = "ReadFile: Reads size bytes from offset in session"]
2317    MAV_FTP_OPCODE_READFILE = 5,
2318    #[doc = "CreateFile: Creates file at path for writing, returns session"]
2319    MAV_FTP_OPCODE_CREATEFILE = 6,
2320    #[doc = "WriteFile: Writes size bytes to offset in session"]
2321    MAV_FTP_OPCODE_WRITEFILE = 7,
2322    #[doc = "RemoveFile: Remove file at path"]
2323    MAV_FTP_OPCODE_REMOVEFILE = 8,
2324    #[doc = "CreateDirectory: Creates directory at path"]
2325    MAV_FTP_OPCODE_CREATEDIRECTORY = 9,
2326    #[doc = "RemoveDirectory: Removes directory at path. The directory must be empty."]
2327    MAV_FTP_OPCODE_REMOVEDIRECTORY = 10,
2328    #[doc = "OpenFileWO: Opens file at path for writing, returns session"]
2329    MAV_FTP_OPCODE_OPENFILEWO = 11,
2330    #[doc = "TruncateFile: Truncate file at path to offset length"]
2331    MAV_FTP_OPCODE_TRUNCATEFILE = 12,
2332    #[doc = "Rename: Rename path1 to path2"]
2333    MAV_FTP_OPCODE_RENAME = 13,
2334    #[doc = "CalcFileCRC32: Calculate CRC32 for file at path"]
2335    MAV_FTP_OPCODE_CALCFILECRC = 14,
2336    #[doc = "BurstReadFile: Burst download session file"]
2337    MAV_FTP_OPCODE_BURSTREADFILE = 15,
2338    #[doc = "ACK: ACK response"]
2339    MAV_FTP_OPCODE_ACK = 128,
2340    #[doc = "NAK: NAK response"]
2341    MAV_FTP_OPCODE_NAK = 129,
2342}
2343impl MavFtpOpcode {
2344    pub const DEFAULT: Self = Self::MAV_FTP_OPCODE_NONE;
2345}
2346impl Default for MavFtpOpcode {
2347    fn default() -> Self {
2348        Self::DEFAULT
2349    }
2350}
2351#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2352#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2353#[cfg_attr(feature = "serde", serde(tag = "type"))]
2354#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2355#[repr(u32)]
2356#[doc = "Fuel types for use in FUEL_TYPE. Fuel types specify the units for the maximum, available and consumed fuel, and for the flow rates."]
2357pub enum MavFuelType {
2358    #[doc = "Not specified. Fuel levels are normalized (i.e. maximum is 1, and other levels are relative to 1)."]
2359    MAV_FUEL_TYPE_UNKNOWN = 0,
2360    #[doc = "A generic liquid fuel. Fuel levels are in millilitres (ml). Fuel rates are in millilitres/second."]
2361    MAV_FUEL_TYPE_LIQUID = 1,
2362    #[doc = "A gas tank. Fuel levels are in kilo-Pascal (kPa), and flow rates are in milliliters per second (ml/s)."]
2363    MAV_FUEL_TYPE_GAS = 2,
2364}
2365impl MavFuelType {
2366    pub const DEFAULT: Self = Self::MAV_FUEL_TYPE_UNKNOWN;
2367}
2368impl Default for MavFuelType {
2369    fn default() -> Self {
2370        Self::DEFAULT
2371    }
2372}
2373bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Flags to report status/failure cases for a power generator (used in GENERATOR_STATUS). Note that FAULTS are conditions that cause the generator to fail. Warnings are conditions that require attention before the next use (they indicate the system is not operating properly)."] pub struct MavGeneratorStatusFlag : u64 { # [doc = "Generator is off."] const MAV_GENERATOR_STATUS_FLAG_OFF = 1 ; # [doc = "Generator is ready to start generating power."] const MAV_GENERATOR_STATUS_FLAG_READY = 2 ; # [doc = "Generator is generating power."] const MAV_GENERATOR_STATUS_FLAG_GENERATING = 4 ; # [doc = "Generator is charging the batteries (generating enough power to charge and provide the load)."] const MAV_GENERATOR_STATUS_FLAG_CHARGING = 8 ; # [doc = "Generator is operating at a reduced maximum power."] const MAV_GENERATOR_STATUS_FLAG_REDUCED_POWER = 16 ; # [doc = "Generator is providing the maximum output."] const MAV_GENERATOR_STATUS_FLAG_MAXPOWER = 32 ; # [doc = "Generator is near the maximum operating temperature, cooling is insufficient."] const MAV_GENERATOR_STATUS_FLAG_OVERTEMP_WARNING = 64 ; # [doc = "Generator hit the maximum operating temperature and shutdown."] const MAV_GENERATOR_STATUS_FLAG_OVERTEMP_FAULT = 128 ; # [doc = "Power electronics are near the maximum operating temperature, cooling is insufficient."] const MAV_GENERATOR_STATUS_FLAG_ELECTRONICS_OVERTEMP_WARNING = 256 ; # [doc = "Power electronics hit the maximum operating temperature and shutdown."] const MAV_GENERATOR_STATUS_FLAG_ELECTRONICS_OVERTEMP_FAULT = 512 ; # [doc = "Power electronics experienced a fault and shutdown."] const MAV_GENERATOR_STATUS_FLAG_ELECTRONICS_FAULT = 1024 ; # [doc = "The power source supplying the generator failed e.g. mechanical generator stopped, tether is no longer providing power, solar cell is in shade, hydrogen reaction no longer happening."] const MAV_GENERATOR_STATUS_FLAG_POWERSOURCE_FAULT = 2048 ; # [doc = "Generator controller having communication problems."] const MAV_GENERATOR_STATUS_FLAG_COMMUNICATION_WARNING = 4096 ; # [doc = "Power electronic or generator cooling system error."] const MAV_GENERATOR_STATUS_FLAG_COOLING_WARNING = 8192 ; # [doc = "Generator controller power rail experienced a fault."] const MAV_GENERATOR_STATUS_FLAG_POWER_RAIL_FAULT = 16384 ; # [doc = "Generator controller exceeded the overcurrent threshold and shutdown to prevent damage."] const MAV_GENERATOR_STATUS_FLAG_OVERCURRENT_FAULT = 32768 ; # [doc = "Generator controller detected a high current going into the batteries and shutdown to prevent battery damage."] const MAV_GENERATOR_STATUS_FLAG_BATTERY_OVERCHARGE_CURRENT_FAULT = 65536 ; # [doc = "Generator controller exceeded it's overvoltage threshold and shutdown to prevent it exceeding the voltage rating."] const MAV_GENERATOR_STATUS_FLAG_OVERVOLTAGE_FAULT = 131072 ; # [doc = "Batteries are under voltage (generator will not start)."] const MAV_GENERATOR_STATUS_FLAG_BATTERY_UNDERVOLT_FAULT = 262144 ; # [doc = "Generator start is inhibited by e.g. a safety switch."] const MAV_GENERATOR_STATUS_FLAG_START_INHIBITED = 524288 ; # [doc = "Generator requires maintenance."] const MAV_GENERATOR_STATUS_FLAG_MAINTENANCE_REQUIRED = 1048576 ; # [doc = "Generator is not ready to generate yet."] const MAV_GENERATOR_STATUS_FLAG_WARMING_UP = 2097152 ; # [doc = "Generator is idle."] const MAV_GENERATOR_STATUS_FLAG_IDLE = 4194304 ; } }
2374impl MavGeneratorStatusFlag {
2375    pub const DEFAULT: Self = Self::MAV_GENERATOR_STATUS_FLAG_OFF;
2376}
2377impl Default for MavGeneratorStatusFlag {
2378    fn default() -> Self {
2379        Self::DEFAULT
2380    }
2381}
2382#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2383#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2384#[cfg_attr(feature = "serde", serde(tag = "type"))]
2385#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2386#[repr(u32)]
2387#[doc = "Actions that may be specified in MAV_CMD_OVERRIDE_GOTO to override mission execution."]
2388pub enum MavGoto {
2389    #[doc = "Hold at the current position."]
2390    MAV_GOTO_DO_HOLD = 0,
2391    #[doc = "Continue with the next item in mission execution."]
2392    MAV_GOTO_DO_CONTINUE = 1,
2393    #[doc = "Hold at the current position of the system"]
2394    MAV_GOTO_HOLD_AT_CURRENT_POSITION = 2,
2395    #[doc = "Hold at the position specified in the parameters of the DO_HOLD action"]
2396    MAV_GOTO_HOLD_AT_SPECIFIED_POSITION = 3,
2397}
2398impl MavGoto {
2399    pub const DEFAULT: Self = Self::MAV_GOTO_DO_HOLD;
2400}
2401impl Default for MavGoto {
2402    fn default() -> Self {
2403        Self::DEFAULT
2404    }
2405}
2406#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2407#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2408#[cfg_attr(feature = "serde", serde(tag = "type"))]
2409#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2410#[repr(u32)]
2411#[doc = "Enumeration of landed detector states"]
2412pub enum MavLandedState {
2413    #[doc = "MAV landed state is unknown"]
2414    MAV_LANDED_STATE_UNDEFINED = 0,
2415    #[doc = "MAV is landed (on ground)"]
2416    MAV_LANDED_STATE_ON_GROUND = 1,
2417    #[doc = "MAV is in air"]
2418    MAV_LANDED_STATE_IN_AIR = 2,
2419    #[doc = "MAV currently taking off"]
2420    MAV_LANDED_STATE_TAKEOFF = 3,
2421    #[doc = "MAV currently landing"]
2422    MAV_LANDED_STATE_LANDING = 4,
2423}
2424impl MavLandedState {
2425    pub const DEFAULT: Self = Self::MAV_LANDED_STATE_UNDEFINED;
2426}
2427impl Default for MavLandedState {
2428    fn default() -> Self {
2429        Self::DEFAULT
2430    }
2431}
2432#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2433#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2434#[cfg_attr(feature = "serde", serde(tag = "type"))]
2435#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2436#[repr(u32)]
2437#[doc = "Result of mission operation (in a MISSION_ACK message)."]
2438pub enum MavMissionResult {
2439    #[doc = "mission accepted OK"]
2440    MAV_MISSION_ACCEPTED = 0,
2441    #[doc = "Generic error / not accepting mission commands at all right now."]
2442    MAV_MISSION_ERROR = 1,
2443    #[doc = "Coordinate frame is not supported."]
2444    MAV_MISSION_UNSUPPORTED_FRAME = 2,
2445    #[doc = "Command is not supported."]
2446    MAV_MISSION_UNSUPPORTED = 3,
2447    #[doc = "Mission items exceed storage space."]
2448    MAV_MISSION_NO_SPACE = 4,
2449    #[doc = "One of the parameters has an invalid value."]
2450    MAV_MISSION_INVALID = 5,
2451    #[doc = "param1 has an invalid value."]
2452    MAV_MISSION_INVALID_PARAM1 = 6,
2453    #[doc = "param2 has an invalid value."]
2454    MAV_MISSION_INVALID_PARAM2 = 7,
2455    #[doc = "param3 has an invalid value."]
2456    MAV_MISSION_INVALID_PARAM3 = 8,
2457    #[doc = "param4 has an invalid value."]
2458    MAV_MISSION_INVALID_PARAM4 = 9,
2459    #[doc = "x / param5 has an invalid value."]
2460    MAV_MISSION_INVALID_PARAM5_X = 10,
2461    #[doc = "y / param6 has an invalid value."]
2462    MAV_MISSION_INVALID_PARAM6_Y = 11,
2463    #[doc = "z / param7 has an invalid value."]
2464    MAV_MISSION_INVALID_PARAM7 = 12,
2465    #[doc = "Mission item received out of sequence"]
2466    MAV_MISSION_INVALID_SEQUENCE = 13,
2467    #[doc = "Not accepting any mission commands from this communication partner."]
2468    MAV_MISSION_DENIED = 14,
2469    #[doc = "Current mission operation cancelled (e.g. mission upload, mission download)."]
2470    MAV_MISSION_OPERATION_CANCELLED = 15,
2471}
2472impl MavMissionResult {
2473    pub const DEFAULT: Self = Self::MAV_MISSION_ACCEPTED;
2474}
2475impl Default for MavMissionResult {
2476    fn default() -> Self {
2477        Self::DEFAULT
2478    }
2479}
2480#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2481#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2482#[cfg_attr(feature = "serde", serde(tag = "type"))]
2483#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2484#[repr(u32)]
2485#[doc = "Type of mission items being requested/sent in mission protocol."]
2486pub enum MavMissionType {
2487    #[doc = "Items are mission commands for main mission."]
2488    MAV_MISSION_TYPE_MISSION = 0,
2489    #[doc = "Specifies GeoFence area(s). Items are MAV_CMD_NAV_FENCE_ GeoFence items."]
2490    MAV_MISSION_TYPE_FENCE = 1,
2491    #[doc = "Specifies the rally points for the vehicle. Rally points are alternative RTL points. Items are MAV_CMD_NAV_RALLY_POINT rally point items."]
2492    MAV_MISSION_TYPE_RALLY = 2,
2493    #[doc = "Only used in MISSION_CLEAR_ALL to clear all mission types."]
2494    MAV_MISSION_TYPE_ALL = 255,
2495}
2496impl MavMissionType {
2497    pub const DEFAULT: Self = Self::MAV_MISSION_TYPE_MISSION;
2498}
2499impl Default for MavMissionType {
2500    fn default() -> Self {
2501        Self::DEFAULT
2502    }
2503}
2504#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2505#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2506#[cfg_attr(feature = "serde", serde(tag = "type"))]
2507#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2508#[repr(u32)]
2509#[doc = "These defines are predefined OR-combined mode flags. There is no need to use values from this enum, but it                simplifies the use of the mode flags. Note that manual input is enabled in all modes as a safety override."]
2510pub enum MavMode {
2511    #[doc = "System is not ready to fly, booting, calibrating, etc. No flag is set."]
2512    MAV_MODE_PREFLIGHT = 0,
2513    #[doc = "System is allowed to be active, under assisted RC control."]
2514    MAV_MODE_STABILIZE_DISARMED = 80,
2515    #[doc = "System is allowed to be active, under assisted RC control."]
2516    MAV_MODE_STABILIZE_ARMED = 208,
2517    #[doc = "System is allowed to be active, under manual (RC) control, no stabilization"]
2518    MAV_MODE_MANUAL_DISARMED = 64,
2519    #[doc = "System is allowed to be active, under manual (RC) control, no stabilization"]
2520    MAV_MODE_MANUAL_ARMED = 192,
2521    #[doc = "System is allowed to be active, under autonomous control, manual setpoint"]
2522    MAV_MODE_GUIDED_DISARMED = 88,
2523    #[doc = "System is allowed to be active, under autonomous control, manual setpoint"]
2524    MAV_MODE_GUIDED_ARMED = 216,
2525    #[doc = "System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by waypoints)"]
2526    MAV_MODE_AUTO_DISARMED = 92,
2527    #[doc = "System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by waypoints)"]
2528    MAV_MODE_AUTO_ARMED = 220,
2529    #[doc = "UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only."]
2530    MAV_MODE_TEST_DISARMED = 66,
2531    #[doc = "UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only."]
2532    MAV_MODE_TEST_ARMED = 194,
2533}
2534impl MavMode {
2535    pub const DEFAULT: Self = Self::MAV_MODE_PREFLIGHT;
2536}
2537impl Default for MavMode {
2538    fn default() -> Self {
2539        Self::DEFAULT
2540    }
2541}
2542bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "These flags encode the MAV mode."] pub struct MavModeFlag : u8 { # [doc = "0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly. Additional note: this flag is to be ignore when sent in the command MAV_CMD_DO_SET_MODE and MAV_CMD_COMPONENT_ARM_DISARM shall be used instead. The flag can still be used to report the armed state."] const MAV_MODE_FLAG_SAFETY_ARMED = 128 ; # [doc = "0b01000000 remote control input is enabled."] const MAV_MODE_FLAG_MANUAL_INPUT_ENABLED = 64 ; # [doc = "0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational."] const MAV_MODE_FLAG_HIL_ENABLED = 32 ; # [doc = "0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around."] const MAV_MODE_FLAG_STABILIZE_ENABLED = 16 ; # [doc = "0b00001000 guided mode enabled, system flies waypoints / mission items."] const MAV_MODE_FLAG_GUIDED_ENABLED = 8 ; # [doc = "0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation."] const MAV_MODE_FLAG_AUTO_ENABLED = 4 ; # [doc = "0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations."] const MAV_MODE_FLAG_TEST_ENABLED = 2 ; # [doc = "0b00000001 Reserved for future use."] const MAV_MODE_FLAG_CUSTOM_MODE_ENABLED = 1 ; } }
2543impl MavModeFlag {
2544    pub const DEFAULT: Self = Self::MAV_MODE_FLAG_SAFETY_ARMED;
2545}
2546impl Default for MavModeFlag {
2547    fn default() -> Self {
2548        Self::DEFAULT
2549    }
2550}
2551#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2552#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2553#[cfg_attr(feature = "serde", serde(tag = "type"))]
2554#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2555#[repr(u32)]
2556#[doc = "These values encode the bit positions of the decode position. These values can be used to read the value of a flag bit by combining the base_mode variable with AND with the flag position value. The result will be either 0 or 1, depending on if the flag is set or not."]
2557pub enum MavModeFlagDecodePosition {
2558    #[doc = "First bit:  10000000"]
2559    MAV_MODE_FLAG_DECODE_POSITION_SAFETY = 128,
2560    #[doc = "Second bit: 01000000"]
2561    MAV_MODE_FLAG_DECODE_POSITION_MANUAL = 64,
2562    #[doc = "Third bit:  00100000"]
2563    MAV_MODE_FLAG_DECODE_POSITION_HIL = 32,
2564    #[doc = "Fourth bit: 00010000"]
2565    MAV_MODE_FLAG_DECODE_POSITION_STABILIZE = 16,
2566    #[doc = "Fifth bit:  00001000"]
2567    MAV_MODE_FLAG_DECODE_POSITION_GUIDED = 8,
2568    #[doc = "Sixth bit:   00000100"]
2569    MAV_MODE_FLAG_DECODE_POSITION_AUTO = 4,
2570    #[doc = "Seventh bit: 00000010"]
2571    MAV_MODE_FLAG_DECODE_POSITION_TEST = 2,
2572    #[doc = "Eighth bit: 00000001"]
2573    MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE = 1,
2574}
2575impl MavModeFlagDecodePosition {
2576    pub const DEFAULT: Self = Self::MAV_MODE_FLAG_DECODE_POSITION_SAFETY;
2577}
2578impl Default for MavModeFlagDecodePosition {
2579    fn default() -> Self {
2580        Self::DEFAULT
2581    }
2582}
2583bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Mode properties."] pub struct MavModeProperty : u32 { # [doc = "If set, this mode is an advanced mode.           For example a rate-controlled manual mode might be advanced, whereas a position-controlled manual mode is not.           A GCS can optionally use this flag to configure the UI for its intended users."] const MAV_MODE_PROPERTY_ADVANCED = 1 ; # [doc = "If set, this mode should not be added to the list of selectable modes.           The mode might still be selected by the FC directly (for example as part of a failsafe)."] const MAV_MODE_PROPERTY_NOT_USER_SELECTABLE = 2 ; # [doc = "If set, this mode is automatically controlled (it may use but does not require a manual controller).           If unset the mode is a assumed to require user input (be a manual mode)."] const MAV_MODE_PROPERTY_AUTO_MODE = 4 ; } }
2584impl MavModeProperty {
2585    pub const DEFAULT: Self = Self::MAV_MODE_PROPERTY_ADVANCED;
2586}
2587impl Default for MavModeProperty {
2588    fn default() -> Self {
2589        Self::DEFAULT
2590    }
2591}
2592#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2593#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2594#[cfg_attr(feature = "serde", serde(tag = "type"))]
2595#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2596#[repr(u32)]
2597#[deprecated = " See `GIMBAL_MANAGER_FLAGS` (Deprecated since 2020-01)"]
2598#[doc = "Enumeration of possible mount operation modes. This message is used by obsolete/deprecated gimbal messages."]
2599pub enum MavMountMode {
2600    #[doc = "Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization"]
2601    MAV_MOUNT_MODE_RETRACT = 0,
2602    #[doc = "Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory."]
2603    MAV_MOUNT_MODE_NEUTRAL = 1,
2604    #[doc = "Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization"]
2605    MAV_MOUNT_MODE_MAVLINK_TARGETING = 2,
2606    #[doc = "Load neutral position and start RC Roll,Pitch,Yaw control with stabilization"]
2607    MAV_MOUNT_MODE_RC_TARGETING = 3,
2608    #[doc = "Load neutral position and start to point to Lat,Lon,Alt"]
2609    MAV_MOUNT_MODE_GPS_POINT = 4,
2610    #[doc = "Gimbal tracks system with specified system ID"]
2611    MAV_MOUNT_MODE_SYSID_TARGET = 5,
2612    #[doc = "Gimbal tracks home position"]
2613    MAV_MOUNT_MODE_HOME_LOCATION = 6,
2614}
2615impl MavMountMode {
2616    pub const DEFAULT: Self = Self::MAV_MOUNT_MODE_RETRACT;
2617}
2618impl Default for MavMountMode {
2619    fn default() -> Self {
2620        Self::DEFAULT
2621    }
2622}
2623#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2624#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2625#[cfg_attr(feature = "serde", serde(tag = "type"))]
2626#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2627#[repr(u32)]
2628pub enum MavOdidArmStatus {
2629    #[doc = "Passing arming checks."]
2630    MAV_ODID_ARM_STATUS_GOOD_TO_ARM = 0,
2631    #[doc = "Generic arming failure, see error string for details."]
2632    MAV_ODID_ARM_STATUS_PRE_ARM_FAIL_GENERIC = 1,
2633}
2634impl MavOdidArmStatus {
2635    pub const DEFAULT: Self = Self::MAV_ODID_ARM_STATUS_GOOD_TO_ARM;
2636}
2637impl Default for MavOdidArmStatus {
2638    fn default() -> Self {
2639        Self::DEFAULT
2640    }
2641}
2642#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2643#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2644#[cfg_attr(feature = "serde", serde(tag = "type"))]
2645#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2646#[repr(u32)]
2647pub enum MavOdidAuthType {
2648    #[doc = "No authentication type is specified."]
2649    MAV_ODID_AUTH_TYPE_NONE = 0,
2650    #[doc = "Signature for the UAS (Unmanned Aircraft System) ID."]
2651    MAV_ODID_AUTH_TYPE_UAS_ID_SIGNATURE = 1,
2652    #[doc = "Signature for the Operator ID."]
2653    MAV_ODID_AUTH_TYPE_OPERATOR_ID_SIGNATURE = 2,
2654    #[doc = "Signature for the entire message set."]
2655    MAV_ODID_AUTH_TYPE_MESSAGE_SET_SIGNATURE = 3,
2656    #[doc = "Authentication is provided by Network Remote ID."]
2657    MAV_ODID_AUTH_TYPE_NETWORK_REMOTE_ID = 4,
2658    #[doc = "The exact authentication type is indicated by the first byte of authentication_data and these type values are managed by ICAO."]
2659    MAV_ODID_AUTH_TYPE_SPECIFIC_AUTHENTICATION = 5,
2660}
2661impl MavOdidAuthType {
2662    pub const DEFAULT: Self = Self::MAV_ODID_AUTH_TYPE_NONE;
2663}
2664impl Default for MavOdidAuthType {
2665    fn default() -> Self {
2666        Self::DEFAULT
2667    }
2668}
2669#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2670#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2671#[cfg_attr(feature = "serde", serde(tag = "type"))]
2672#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2673#[repr(u32)]
2674pub enum MavOdidCategoryEu {
2675    #[doc = "The category for the UA, according to the EU specification, is undeclared."]
2676    MAV_ODID_CATEGORY_EU_UNDECLARED = 0,
2677    #[doc = "The category for the UA, according to the EU specification, is the Open category."]
2678    MAV_ODID_CATEGORY_EU_OPEN = 1,
2679    #[doc = "The category for the UA, according to the EU specification, is the Specific category."]
2680    MAV_ODID_CATEGORY_EU_SPECIFIC = 2,
2681    #[doc = "The category for the UA, according to the EU specification, is the Certified category."]
2682    MAV_ODID_CATEGORY_EU_CERTIFIED = 3,
2683}
2684impl MavOdidCategoryEu {
2685    pub const DEFAULT: Self = Self::MAV_ODID_CATEGORY_EU_UNDECLARED;
2686}
2687impl Default for MavOdidCategoryEu {
2688    fn default() -> Self {
2689        Self::DEFAULT
2690    }
2691}
2692#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2693#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2694#[cfg_attr(feature = "serde", serde(tag = "type"))]
2695#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2696#[repr(u32)]
2697pub enum MavOdidClassEu {
2698    #[doc = "The class for the UA, according to the EU specification, is undeclared."]
2699    MAV_ODID_CLASS_EU_UNDECLARED = 0,
2700    #[doc = "The class for the UA, according to the EU specification, is Class 0."]
2701    MAV_ODID_CLASS_EU_CLASS_0 = 1,
2702    #[doc = "The class for the UA, according to the EU specification, is Class 1."]
2703    MAV_ODID_CLASS_EU_CLASS_1 = 2,
2704    #[doc = "The class for the UA, according to the EU specification, is Class 2."]
2705    MAV_ODID_CLASS_EU_CLASS_2 = 3,
2706    #[doc = "The class for the UA, according to the EU specification, is Class 3."]
2707    MAV_ODID_CLASS_EU_CLASS_3 = 4,
2708    #[doc = "The class for the UA, according to the EU specification, is Class 4."]
2709    MAV_ODID_CLASS_EU_CLASS_4 = 5,
2710    #[doc = "The class for the UA, according to the EU specification, is Class 5."]
2711    MAV_ODID_CLASS_EU_CLASS_5 = 6,
2712    #[doc = "The class for the UA, according to the EU specification, is Class 6."]
2713    MAV_ODID_CLASS_EU_CLASS_6 = 7,
2714}
2715impl MavOdidClassEu {
2716    pub const DEFAULT: Self = Self::MAV_ODID_CLASS_EU_UNDECLARED;
2717}
2718impl Default for MavOdidClassEu {
2719    fn default() -> Self {
2720        Self::DEFAULT
2721    }
2722}
2723#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2724#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2725#[cfg_attr(feature = "serde", serde(tag = "type"))]
2726#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2727#[repr(u32)]
2728pub enum MavOdidClassificationType {
2729    #[doc = "The classification type for the UA is undeclared."]
2730    MAV_ODID_CLASSIFICATION_TYPE_UNDECLARED = 0,
2731    #[doc = "The classification type for the UA follows EU (European Union) specifications."]
2732    MAV_ODID_CLASSIFICATION_TYPE_EU = 1,
2733}
2734impl MavOdidClassificationType {
2735    pub const DEFAULT: Self = Self::MAV_ODID_CLASSIFICATION_TYPE_UNDECLARED;
2736}
2737impl Default for MavOdidClassificationType {
2738    fn default() -> Self {
2739        Self::DEFAULT
2740    }
2741}
2742#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2743#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2744#[cfg_attr(feature = "serde", serde(tag = "type"))]
2745#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2746#[repr(u32)]
2747pub enum MavOdidDescType {
2748    #[doc = "Optional free-form text description of the purpose of the flight."]
2749    MAV_ODID_DESC_TYPE_TEXT = 0,
2750    #[doc = "Optional additional clarification when status == MAV_ODID_STATUS_EMERGENCY."]
2751    MAV_ODID_DESC_TYPE_EMERGENCY = 1,
2752    #[doc = "Optional additional clarification when status != MAV_ODID_STATUS_EMERGENCY."]
2753    MAV_ODID_DESC_TYPE_EXTENDED_STATUS = 2,
2754}
2755impl MavOdidDescType {
2756    pub const DEFAULT: Self = Self::MAV_ODID_DESC_TYPE_TEXT;
2757}
2758impl Default for MavOdidDescType {
2759    fn default() -> Self {
2760        Self::DEFAULT
2761    }
2762}
2763#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2764#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2765#[cfg_attr(feature = "serde", serde(tag = "type"))]
2766#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2767#[repr(u32)]
2768pub enum MavOdidHeightRef {
2769    #[doc = "The height field is relative to the take-off location."]
2770    MAV_ODID_HEIGHT_REF_OVER_TAKEOFF = 0,
2771    #[doc = "The height field is relative to ground."]
2772    MAV_ODID_HEIGHT_REF_OVER_GROUND = 1,
2773}
2774impl MavOdidHeightRef {
2775    pub const DEFAULT: Self = Self::MAV_ODID_HEIGHT_REF_OVER_TAKEOFF;
2776}
2777impl Default for MavOdidHeightRef {
2778    fn default() -> Self {
2779        Self::DEFAULT
2780    }
2781}
2782#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2783#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2784#[cfg_attr(feature = "serde", serde(tag = "type"))]
2785#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2786#[repr(u32)]
2787pub enum MavOdidHorAcc {
2788    #[doc = "The horizontal accuracy is unknown."]
2789    MAV_ODID_HOR_ACC_UNKNOWN = 0,
2790    #[doc = "The horizontal accuracy is smaller than 10 Nautical Miles. 18.52 km."]
2791    MAV_ODID_HOR_ACC_10NM = 1,
2792    #[doc = "The horizontal accuracy is smaller than 4 Nautical Miles. 7.408 km."]
2793    MAV_ODID_HOR_ACC_4NM = 2,
2794    #[doc = "The horizontal accuracy is smaller than 2 Nautical Miles. 3.704 km."]
2795    MAV_ODID_HOR_ACC_2NM = 3,
2796    #[doc = "The horizontal accuracy is smaller than 1 Nautical Miles. 1.852 km."]
2797    MAV_ODID_HOR_ACC_1NM = 4,
2798    #[doc = "The horizontal accuracy is smaller than 0.5 Nautical Miles. 926 m."]
2799    MAV_ODID_HOR_ACC_0_5NM = 5,
2800    #[doc = "The horizontal accuracy is smaller than 0.3 Nautical Miles. 555.6 m."]
2801    MAV_ODID_HOR_ACC_0_3NM = 6,
2802    #[doc = "The horizontal accuracy is smaller than 0.1 Nautical Miles. 185.2 m."]
2803    MAV_ODID_HOR_ACC_0_1NM = 7,
2804    #[doc = "The horizontal accuracy is smaller than 0.05 Nautical Miles. 92.6 m."]
2805    MAV_ODID_HOR_ACC_0_05NM = 8,
2806    #[doc = "The horizontal accuracy is smaller than 30 meter."]
2807    MAV_ODID_HOR_ACC_30_METER = 9,
2808    #[doc = "The horizontal accuracy is smaller than 10 meter."]
2809    MAV_ODID_HOR_ACC_10_METER = 10,
2810    #[doc = "The horizontal accuracy is smaller than 3 meter."]
2811    MAV_ODID_HOR_ACC_3_METER = 11,
2812    #[doc = "The horizontal accuracy is smaller than 1 meter."]
2813    MAV_ODID_HOR_ACC_1_METER = 12,
2814}
2815impl MavOdidHorAcc {
2816    pub const DEFAULT: Self = Self::MAV_ODID_HOR_ACC_UNKNOWN;
2817}
2818impl Default for MavOdidHorAcc {
2819    fn default() -> Self {
2820        Self::DEFAULT
2821    }
2822}
2823#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2824#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2825#[cfg_attr(feature = "serde", serde(tag = "type"))]
2826#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2827#[repr(u32)]
2828pub enum MavOdidIdType {
2829    #[doc = "No type defined."]
2830    MAV_ODID_ID_TYPE_NONE = 0,
2831    #[doc = "Manufacturer Serial Number (ANSI/CTA-2063 format)."]
2832    MAV_ODID_ID_TYPE_SERIAL_NUMBER = 1,
2833    #[doc = "CAA (Civil Aviation Authority) registered ID. Format: [ICAO Country Code].[CAA Assigned ID]."]
2834    MAV_ODID_ID_TYPE_CAA_REGISTRATION_ID = 2,
2835    #[doc = "UTM (Unmanned Traffic Management) assigned UUID (RFC4122)."]
2836    MAV_ODID_ID_TYPE_UTM_ASSIGNED_UUID = 3,
2837    #[doc = "A 20 byte ID for a specific flight/session. The exact ID type is indicated by the first byte of uas_id and these type values are managed by ICAO."]
2838    MAV_ODID_ID_TYPE_SPECIFIC_SESSION_ID = 4,
2839}
2840impl MavOdidIdType {
2841    pub const DEFAULT: Self = Self::MAV_ODID_ID_TYPE_NONE;
2842}
2843impl Default for MavOdidIdType {
2844    fn default() -> Self {
2845        Self::DEFAULT
2846    }
2847}
2848#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2849#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2850#[cfg_attr(feature = "serde", serde(tag = "type"))]
2851#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2852#[repr(u32)]
2853pub enum MavOdidOperatorIdType {
2854    #[doc = "CAA (Civil Aviation Authority) registered operator ID."]
2855    MAV_ODID_OPERATOR_ID_TYPE_CAA = 0,
2856}
2857impl MavOdidOperatorIdType {
2858    pub const DEFAULT: Self = Self::MAV_ODID_OPERATOR_ID_TYPE_CAA;
2859}
2860impl Default for MavOdidOperatorIdType {
2861    fn default() -> Self {
2862        Self::DEFAULT
2863    }
2864}
2865#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2866#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2867#[cfg_attr(feature = "serde", serde(tag = "type"))]
2868#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2869#[repr(u32)]
2870pub enum MavOdidOperatorLocationType {
2871    #[doc = "The location/altitude of the operator is the same as the take-off location."]
2872    MAV_ODID_OPERATOR_LOCATION_TYPE_TAKEOFF = 0,
2873    #[doc = "The location/altitude of the operator is dynamic. E.g. based on live GNSS data."]
2874    MAV_ODID_OPERATOR_LOCATION_TYPE_LIVE_GNSS = 1,
2875    #[doc = "The location/altitude of the operator are fixed values."]
2876    MAV_ODID_OPERATOR_LOCATION_TYPE_FIXED = 2,
2877}
2878impl MavOdidOperatorLocationType {
2879    pub const DEFAULT: Self = Self::MAV_ODID_OPERATOR_LOCATION_TYPE_TAKEOFF;
2880}
2881impl Default for MavOdidOperatorLocationType {
2882    fn default() -> Self {
2883        Self::DEFAULT
2884    }
2885}
2886#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2887#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2888#[cfg_attr(feature = "serde", serde(tag = "type"))]
2889#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2890#[repr(u32)]
2891pub enum MavOdidSpeedAcc {
2892    #[doc = "The speed accuracy is unknown."]
2893    MAV_ODID_SPEED_ACC_UNKNOWN = 0,
2894    #[doc = "The speed accuracy is smaller than 10 meters per second."]
2895    MAV_ODID_SPEED_ACC_10_METERS_PER_SECOND = 1,
2896    #[doc = "The speed accuracy is smaller than 3 meters per second."]
2897    MAV_ODID_SPEED_ACC_3_METERS_PER_SECOND = 2,
2898    #[doc = "The speed accuracy is smaller than 1 meters per second."]
2899    MAV_ODID_SPEED_ACC_1_METERS_PER_SECOND = 3,
2900    #[doc = "The speed accuracy is smaller than 0.3 meters per second."]
2901    MAV_ODID_SPEED_ACC_0_3_METERS_PER_SECOND = 4,
2902}
2903impl MavOdidSpeedAcc {
2904    pub const DEFAULT: Self = Self::MAV_ODID_SPEED_ACC_UNKNOWN;
2905}
2906impl Default for MavOdidSpeedAcc {
2907    fn default() -> Self {
2908        Self::DEFAULT
2909    }
2910}
2911#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2912#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2913#[cfg_attr(feature = "serde", serde(tag = "type"))]
2914#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2915#[repr(u32)]
2916pub enum MavOdidStatus {
2917    #[doc = "The status of the (UA) Unmanned Aircraft is undefined."]
2918    MAV_ODID_STATUS_UNDECLARED = 0,
2919    #[doc = "The UA is on the ground."]
2920    MAV_ODID_STATUS_GROUND = 1,
2921    #[doc = "The UA is in the air."]
2922    MAV_ODID_STATUS_AIRBORNE = 2,
2923    #[doc = "The UA is having an emergency."]
2924    MAV_ODID_STATUS_EMERGENCY = 3,
2925    #[doc = "The remote ID system is failing or unreliable in some way."]
2926    MAV_ODID_STATUS_REMOTE_ID_SYSTEM_FAILURE = 4,
2927}
2928impl MavOdidStatus {
2929    pub const DEFAULT: Self = Self::MAV_ODID_STATUS_UNDECLARED;
2930}
2931impl Default for MavOdidStatus {
2932    fn default() -> Self {
2933        Self::DEFAULT
2934    }
2935}
2936#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2937#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2938#[cfg_attr(feature = "serde", serde(tag = "type"))]
2939#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2940#[repr(u32)]
2941pub enum MavOdidTimeAcc {
2942    #[doc = "The timestamp accuracy is unknown."]
2943    MAV_ODID_TIME_ACC_UNKNOWN = 0,
2944    #[doc = "The timestamp accuracy is smaller than or equal to 0.1 second."]
2945    MAV_ODID_TIME_ACC_0_1_SECOND = 1,
2946    #[doc = "The timestamp accuracy is smaller than or equal to 0.2 second."]
2947    MAV_ODID_TIME_ACC_0_2_SECOND = 2,
2948    #[doc = "The timestamp accuracy is smaller than or equal to 0.3 second."]
2949    MAV_ODID_TIME_ACC_0_3_SECOND = 3,
2950    #[doc = "The timestamp accuracy is smaller than or equal to 0.4 second."]
2951    MAV_ODID_TIME_ACC_0_4_SECOND = 4,
2952    #[doc = "The timestamp accuracy is smaller than or equal to 0.5 second."]
2953    MAV_ODID_TIME_ACC_0_5_SECOND = 5,
2954    #[doc = "The timestamp accuracy is smaller than or equal to 0.6 second."]
2955    MAV_ODID_TIME_ACC_0_6_SECOND = 6,
2956    #[doc = "The timestamp accuracy is smaller than or equal to 0.7 second."]
2957    MAV_ODID_TIME_ACC_0_7_SECOND = 7,
2958    #[doc = "The timestamp accuracy is smaller than or equal to 0.8 second."]
2959    MAV_ODID_TIME_ACC_0_8_SECOND = 8,
2960    #[doc = "The timestamp accuracy is smaller than or equal to 0.9 second."]
2961    MAV_ODID_TIME_ACC_0_9_SECOND = 9,
2962    #[doc = "The timestamp accuracy is smaller than or equal to 1.0 second."]
2963    MAV_ODID_TIME_ACC_1_0_SECOND = 10,
2964    #[doc = "The timestamp accuracy is smaller than or equal to 1.1 second."]
2965    MAV_ODID_TIME_ACC_1_1_SECOND = 11,
2966    #[doc = "The timestamp accuracy is smaller than or equal to 1.2 second."]
2967    MAV_ODID_TIME_ACC_1_2_SECOND = 12,
2968    #[doc = "The timestamp accuracy is smaller than or equal to 1.3 second."]
2969    MAV_ODID_TIME_ACC_1_3_SECOND = 13,
2970    #[doc = "The timestamp accuracy is smaller than or equal to 1.4 second."]
2971    MAV_ODID_TIME_ACC_1_4_SECOND = 14,
2972    #[doc = "The timestamp accuracy is smaller than or equal to 1.5 second."]
2973    MAV_ODID_TIME_ACC_1_5_SECOND = 15,
2974}
2975impl MavOdidTimeAcc {
2976    pub const DEFAULT: Self = Self::MAV_ODID_TIME_ACC_UNKNOWN;
2977}
2978impl Default for MavOdidTimeAcc {
2979    fn default() -> Self {
2980        Self::DEFAULT
2981    }
2982}
2983#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
2984#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2985#[cfg_attr(feature = "serde", serde(tag = "type"))]
2986#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
2987#[repr(u32)]
2988pub enum MavOdidUaType {
2989    #[doc = "No UA (Unmanned Aircraft) type defined."]
2990    MAV_ODID_UA_TYPE_NONE = 0,
2991    #[doc = "Aeroplane/Airplane. Fixed wing."]
2992    MAV_ODID_UA_TYPE_AEROPLANE = 1,
2993    #[doc = "Helicopter or multirotor."]
2994    MAV_ODID_UA_TYPE_HELICOPTER_OR_MULTIROTOR = 2,
2995    #[doc = "Gyroplane."]
2996    MAV_ODID_UA_TYPE_GYROPLANE = 3,
2997    #[doc = "VTOL (Vertical Take-Off and Landing). Fixed wing aircraft that can take off vertically."]
2998    MAV_ODID_UA_TYPE_HYBRID_LIFT = 4,
2999    #[doc = "Ornithopter."]
3000    MAV_ODID_UA_TYPE_ORNITHOPTER = 5,
3001    #[doc = "Glider."]
3002    MAV_ODID_UA_TYPE_GLIDER = 6,
3003    #[doc = "Kite."]
3004    MAV_ODID_UA_TYPE_KITE = 7,
3005    #[doc = "Free Balloon."]
3006    MAV_ODID_UA_TYPE_FREE_BALLOON = 8,
3007    #[doc = "Captive Balloon."]
3008    MAV_ODID_UA_TYPE_CAPTIVE_BALLOON = 9,
3009    #[doc = "Airship. E.g. a blimp."]
3010    MAV_ODID_UA_TYPE_AIRSHIP = 10,
3011    #[doc = "Free Fall/Parachute (unpowered)."]
3012    MAV_ODID_UA_TYPE_FREE_FALL_PARACHUTE = 11,
3013    #[doc = "Rocket."]
3014    MAV_ODID_UA_TYPE_ROCKET = 12,
3015    #[doc = "Tethered powered aircraft."]
3016    MAV_ODID_UA_TYPE_TETHERED_POWERED_AIRCRAFT = 13,
3017    #[doc = "Ground Obstacle."]
3018    MAV_ODID_UA_TYPE_GROUND_OBSTACLE = 14,
3019    #[doc = "Other type of aircraft not listed earlier."]
3020    MAV_ODID_UA_TYPE_OTHER = 15,
3021}
3022impl MavOdidUaType {
3023    pub const DEFAULT: Self = Self::MAV_ODID_UA_TYPE_NONE;
3024}
3025impl Default for MavOdidUaType {
3026    fn default() -> Self {
3027        Self::DEFAULT
3028    }
3029}
3030#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3031#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3032#[cfg_attr(feature = "serde", serde(tag = "type"))]
3033#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3034#[repr(u32)]
3035pub enum MavOdidVerAcc {
3036    #[doc = "The vertical accuracy is unknown."]
3037    MAV_ODID_VER_ACC_UNKNOWN = 0,
3038    #[doc = "The vertical accuracy is smaller than 150 meter."]
3039    MAV_ODID_VER_ACC_150_METER = 1,
3040    #[doc = "The vertical accuracy is smaller than 45 meter."]
3041    MAV_ODID_VER_ACC_45_METER = 2,
3042    #[doc = "The vertical accuracy is smaller than 25 meter."]
3043    MAV_ODID_VER_ACC_25_METER = 3,
3044    #[doc = "The vertical accuracy is smaller than 10 meter."]
3045    MAV_ODID_VER_ACC_10_METER = 4,
3046    #[doc = "The vertical accuracy is smaller than 3 meter."]
3047    MAV_ODID_VER_ACC_3_METER = 5,
3048    #[doc = "The vertical accuracy is smaller than 1 meter."]
3049    MAV_ODID_VER_ACC_1_METER = 6,
3050}
3051impl MavOdidVerAcc {
3052    pub const DEFAULT: Self = Self::MAV_ODID_VER_ACC_UNKNOWN;
3053}
3054impl Default for MavOdidVerAcc {
3055    fn default() -> Self {
3056        Self::DEFAULT
3057    }
3058}
3059#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3060#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3061#[cfg_attr(feature = "serde", serde(tag = "type"))]
3062#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3063#[repr(u32)]
3064#[doc = "Specifies the datatype of a MAVLink extended parameter."]
3065pub enum MavParamExtType {
3066    #[doc = "8-bit unsigned integer"]
3067    MAV_PARAM_EXT_TYPE_UINT8 = 1,
3068    #[doc = "8-bit signed integer"]
3069    MAV_PARAM_EXT_TYPE_INT8 = 2,
3070    #[doc = "16-bit unsigned integer"]
3071    MAV_PARAM_EXT_TYPE_UINT16 = 3,
3072    #[doc = "16-bit signed integer"]
3073    MAV_PARAM_EXT_TYPE_INT16 = 4,
3074    #[doc = "32-bit unsigned integer"]
3075    MAV_PARAM_EXT_TYPE_UINT32 = 5,
3076    #[doc = "32-bit signed integer"]
3077    MAV_PARAM_EXT_TYPE_INT32 = 6,
3078    #[doc = "64-bit unsigned integer"]
3079    MAV_PARAM_EXT_TYPE_UINT64 = 7,
3080    #[doc = "64-bit signed integer"]
3081    MAV_PARAM_EXT_TYPE_INT64 = 8,
3082    #[doc = "32-bit floating-point"]
3083    MAV_PARAM_EXT_TYPE_REAL32 = 9,
3084    #[doc = "64-bit floating-point"]
3085    MAV_PARAM_EXT_TYPE_REAL64 = 10,
3086    #[doc = "Custom Type"]
3087    MAV_PARAM_EXT_TYPE_CUSTOM = 11,
3088}
3089impl MavParamExtType {
3090    pub const DEFAULT: Self = Self::MAV_PARAM_EXT_TYPE_UINT8;
3091}
3092impl Default for MavParamExtType {
3093    fn default() -> Self {
3094        Self::DEFAULT
3095    }
3096}
3097#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3098#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3099#[cfg_attr(feature = "serde", serde(tag = "type"))]
3100#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3101#[repr(u32)]
3102#[doc = "Specifies the datatype of a MAVLink parameter."]
3103pub enum MavParamType {
3104    #[doc = "8-bit unsigned integer"]
3105    MAV_PARAM_TYPE_UINT8 = 1,
3106    #[doc = "8-bit signed integer"]
3107    MAV_PARAM_TYPE_INT8 = 2,
3108    #[doc = "16-bit unsigned integer"]
3109    MAV_PARAM_TYPE_UINT16 = 3,
3110    #[doc = "16-bit signed integer"]
3111    MAV_PARAM_TYPE_INT16 = 4,
3112    #[doc = "32-bit unsigned integer"]
3113    MAV_PARAM_TYPE_UINT32 = 5,
3114    #[doc = "32-bit signed integer"]
3115    MAV_PARAM_TYPE_INT32 = 6,
3116    #[doc = "64-bit unsigned integer"]
3117    MAV_PARAM_TYPE_UINT64 = 7,
3118    #[doc = "64-bit signed integer"]
3119    MAV_PARAM_TYPE_INT64 = 8,
3120    #[doc = "32-bit floating-point"]
3121    MAV_PARAM_TYPE_REAL32 = 9,
3122    #[doc = "64-bit floating-point"]
3123    MAV_PARAM_TYPE_REAL64 = 10,
3124}
3125impl MavParamType {
3126    pub const DEFAULT: Self = Self::MAV_PARAM_TYPE_UINT8;
3127}
3128impl Default for MavParamType {
3129    fn default() -> Self {
3130        Self::DEFAULT
3131    }
3132}
3133bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Power supply status flags (bitmask)"] pub struct MavPowerStatus : u16 { # [doc = "main brick power supply valid"] const MAV_POWER_STATUS_BRICK_VALID = 1 ; # [doc = "main servo power supply valid for FMU"] const MAV_POWER_STATUS_SERVO_VALID = 2 ; # [doc = "USB power is connected"] const MAV_POWER_STATUS_USB_CONNECTED = 4 ; # [doc = "peripheral supply is in over-current state"] const MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 ; # [doc = "hi-power peripheral supply is in over-current state"] const MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 ; # [doc = "Power status has changed since boot"] const MAV_POWER_STATUS_CHANGED = 32 ; } }
3134impl MavPowerStatus {
3135    pub const DEFAULT: Self = Self::MAV_POWER_STATUS_BRICK_VALID;
3136}
3137impl Default for MavPowerStatus {
3138    fn default() -> Self {
3139        Self::DEFAULT
3140    }
3141}
3142bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Bitmask of (optional) autopilot capabilities (64 bit). If a bit is set, the autopilot supports this capability."] pub struct MavProtocolCapability : u64 { # [doc = "Autopilot supports the MISSION_ITEM float message type.           Note that MISSION_ITEM is deprecated, and autopilots should use MISSION_INT instead."] const MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 ; # [deprecated = " See `MAV_PROTOCOL_CAPABILITY_PARAM_ENCODE_C_CAST` (Deprecated since 2022-03)"] # [doc = "Autopilot supports the new param float message type."] const MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 ; # [doc = "Autopilot supports MISSION_ITEM_INT scaled integer message type.           Note that this flag must always be set if missions are supported, because missions must always use MISSION_ITEM_INT (rather than MISSION_ITEM, which is deprecated)."] const MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 ; # [doc = "Autopilot supports COMMAND_INT scaled integer message type."] const MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 ; # [doc = "Parameter protocol uses byte-wise encoding of parameter values into param_value (float) fields: <https://mavlink.io/en/services/parameter.html#parameter-encoding>.           Note that either this flag or MAV_PROTOCOL_CAPABILITY_PARAM_ENCODE_C_CAST should be set if the parameter protocol is supported."] const MAV_PROTOCOL_CAPABILITY_PARAM_ENCODE_BYTEWISE = 16 ; # [doc = "Autopilot supports the File Transfer Protocol v1: <https://mavlink.io/en/services/ftp.html>."] const MAV_PROTOCOL_CAPABILITY_FTP = 32 ; # [doc = "Autopilot supports commanding attitude offboard."] const MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 ; # [doc = "Autopilot supports commanding position and velocity targets in local NED frame."] const MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 ; # [doc = "Autopilot supports commanding position and velocity targets in global scaled integers."] const MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 ; # [doc = "Autopilot supports terrain protocol / data handling."] const MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 ; # [doc = "Reserved for future use."] const MAV_PROTOCOL_CAPABILITY_RESERVED3 = 1024 ; # [doc = "Autopilot supports the MAV_CMD_DO_FLIGHTTERMINATION command (flight termination)."] const MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 ; # [doc = "Autopilot supports onboard compass calibration."] const MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 ; # [doc = "Autopilot supports MAVLink version 2."] const MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 ; # [doc = "Autopilot supports mission fence protocol."] const MAV_PROTOCOL_CAPABILITY_MISSION_FENCE = 16384 ; # [doc = "Autopilot supports mission rally point protocol."] const MAV_PROTOCOL_CAPABILITY_MISSION_RALLY = 32768 ; # [doc = "Reserved for future use."] const MAV_PROTOCOL_CAPABILITY_RESERVED2 = 65536 ; # [doc = "Parameter protocol uses C-cast of parameter values to set the param_value (float) fields: <https://mavlink.io/en/services/parameter.html#parameter-encoding>.           Note that either this flag or MAV_PROTOCOL_CAPABILITY_PARAM_ENCODE_BYTEWISE should be set if the parameter protocol is supported."] const MAV_PROTOCOL_CAPABILITY_PARAM_ENCODE_C_CAST = 131072 ; # [doc = "This component implements/is a gimbal manager. This means the GIMBAL_MANAGER_INFORMATION, and other messages can be requested."] const MAV_PROTOCOL_CAPABILITY_COMPONENT_IMPLEMENTS_GIMBAL_MANAGER = 262144 ; # [doc = "Component supports locking control to a particular GCS independent of its system (via MAV_CMD_REQUEST_OPERATOR_CONTROL)."] const MAV_PROTOCOL_CAPABILITY_COMPONENT_ACCEPTS_GCS_CONTROL = 524288 ; } }
3143impl MavProtocolCapability {
3144    pub const DEFAULT: Self = Self::MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT;
3145}
3146impl Default for MavProtocolCapability {
3147    fn default() -> Self {
3148        Self::DEFAULT
3149    }
3150}
3151#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3152#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3153#[cfg_attr(feature = "serde", serde(tag = "type"))]
3154#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3155#[repr(u32)]
3156#[doc = "Result from a MAVLink command (MAV_CMD)"]
3157pub enum MavResult {
3158    #[doc = "Command is valid (is supported and has valid parameters), and was executed."]
3159    MAV_RESULT_ACCEPTED = 0,
3160    #[doc = "Command is valid, but cannot be executed at this time. This is used to indicate a problem that should be fixed just by waiting (e.g. a state machine is busy, can't arm because have not got GPS lock, etc.). Retrying later should work."]
3161    MAV_RESULT_TEMPORARILY_REJECTED = 1,
3162    #[doc = "Command is invalid (is supported but has invalid parameters). Retrying same command and parameters will not work."]
3163    MAV_RESULT_DENIED = 2,
3164    #[doc = "Command is not supported (unknown)."]
3165    MAV_RESULT_UNSUPPORTED = 3,
3166    #[doc = "Command is valid, but execution has failed. This is used to indicate any non-temporary or unexpected problem, i.e. any problem that must be fixed before the command can succeed/be retried. For example, attempting to write a file when out of memory, attempting to arm when sensors are not calibrated, etc."]
3167    MAV_RESULT_FAILED = 4,
3168    #[doc = "Command is valid and is being executed. This will be followed by further progress updates, i.e. the component may send further COMMAND_ACK messages with result MAV_RESULT_IN_PROGRESS (at a rate decided by the implementation), and must terminate by sending a COMMAND_ACK message with final result of the operation. The COMMAND_ACK.progress field can be used to indicate the progress of the operation."]
3169    MAV_RESULT_IN_PROGRESS = 5,
3170    #[doc = "Command has been cancelled (as a result of receiving a COMMAND_CANCEL message)."]
3171    MAV_RESULT_CANCELLED = 6,
3172    #[doc = "Command is only accepted when sent as a COMMAND_LONG."]
3173    MAV_RESULT_COMMAND_LONG_ONLY = 7,
3174    #[doc = "Command is only accepted when sent as a COMMAND_INT."]
3175    MAV_RESULT_COMMAND_INT_ONLY = 8,
3176    #[doc = "Command is invalid because a frame is required and the specified frame is not supported."]
3177    MAV_RESULT_COMMAND_UNSUPPORTED_MAV_FRAME = 9,
3178}
3179impl MavResult {
3180    pub const DEFAULT: Self = Self::MAV_RESULT_ACCEPTED;
3181}
3182impl Default for MavResult {
3183    fn default() -> Self {
3184        Self::DEFAULT
3185    }
3186}
3187#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3188#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3189#[cfg_attr(feature = "serde", serde(tag = "type"))]
3190#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3191#[repr(u32)]
3192#[deprecated = " See `MAV_CMD_DO_SET_ROI_*` (Deprecated since 2018-01)"]
3193#[doc = "The ROI (region of interest) for the vehicle. This can be                 be used by the vehicle for camera/vehicle attitude alignment (see                 MAV_CMD_NAV_ROI)."]
3194pub enum MavRoi {
3195    #[doc = "No region of interest."]
3196    MAV_ROI_NONE = 0,
3197    #[doc = "Point toward next waypoint, with optional pitch/roll/yaw offset."]
3198    MAV_ROI_WPNEXT = 1,
3199    #[doc = "Point toward given waypoint."]
3200    MAV_ROI_WPINDEX = 2,
3201    #[doc = "Point toward fixed location."]
3202    MAV_ROI_LOCATION = 3,
3203    #[doc = "Point toward of given id."]
3204    MAV_ROI_TARGET = 4,
3205}
3206impl MavRoi {
3207    pub const DEFAULT: Self = Self::MAV_ROI_NONE;
3208}
3209impl Default for MavRoi {
3210    fn default() -> Self {
3211        Self::DEFAULT
3212    }
3213}
3214#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3215#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3216#[cfg_attr(feature = "serde", serde(tag = "type"))]
3217#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3218#[repr(u32)]
3219#[doc = "Enumeration of sensor orientation, according to its rotations"]
3220pub enum MavSensorOrientation {
3221    #[doc = "Roll: 0, Pitch: 0, Yaw: 0"]
3222    MAV_SENSOR_ROTATION_NONE = 0,
3223    #[doc = "Roll: 0, Pitch: 0, Yaw: 45"]
3224    MAV_SENSOR_ROTATION_YAW_45 = 1,
3225    #[doc = "Roll: 0, Pitch: 0, Yaw: 90"]
3226    MAV_SENSOR_ROTATION_YAW_90 = 2,
3227    #[doc = "Roll: 0, Pitch: 0, Yaw: 135"]
3228    MAV_SENSOR_ROTATION_YAW_135 = 3,
3229    #[doc = "Roll: 0, Pitch: 0, Yaw: 180"]
3230    MAV_SENSOR_ROTATION_YAW_180 = 4,
3231    #[doc = "Roll: 0, Pitch: 0, Yaw: 225"]
3232    MAV_SENSOR_ROTATION_YAW_225 = 5,
3233    #[doc = "Roll: 0, Pitch: 0, Yaw: 270"]
3234    MAV_SENSOR_ROTATION_YAW_270 = 6,
3235    #[doc = "Roll: 0, Pitch: 0, Yaw: 315"]
3236    MAV_SENSOR_ROTATION_YAW_315 = 7,
3237    #[doc = "Roll: 180, Pitch: 0, Yaw: 0"]
3238    MAV_SENSOR_ROTATION_ROLL_180 = 8,
3239    #[doc = "Roll: 180, Pitch: 0, Yaw: 45"]
3240    MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9,
3241    #[doc = "Roll: 180, Pitch: 0, Yaw: 90"]
3242    MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10,
3243    #[doc = "Roll: 180, Pitch: 0, Yaw: 135"]
3244    MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11,
3245    #[doc = "Roll: 0, Pitch: 180, Yaw: 0"]
3246    MAV_SENSOR_ROTATION_PITCH_180 = 12,
3247    #[doc = "Roll: 180, Pitch: 0, Yaw: 225"]
3248    MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13,
3249    #[doc = "Roll: 180, Pitch: 0, Yaw: 270"]
3250    MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14,
3251    #[doc = "Roll: 180, Pitch: 0, Yaw: 315"]
3252    MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15,
3253    #[doc = "Roll: 90, Pitch: 0, Yaw: 0"]
3254    MAV_SENSOR_ROTATION_ROLL_90 = 16,
3255    #[doc = "Roll: 90, Pitch: 0, Yaw: 45"]
3256    MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17,
3257    #[doc = "Roll: 90, Pitch: 0, Yaw: 90"]
3258    MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18,
3259    #[doc = "Roll: 90, Pitch: 0, Yaw: 135"]
3260    MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19,
3261    #[doc = "Roll: 270, Pitch: 0, Yaw: 0"]
3262    MAV_SENSOR_ROTATION_ROLL_270 = 20,
3263    #[doc = "Roll: 270, Pitch: 0, Yaw: 45"]
3264    MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21,
3265    #[doc = "Roll: 270, Pitch: 0, Yaw: 90"]
3266    MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22,
3267    #[doc = "Roll: 270, Pitch: 0, Yaw: 135"]
3268    MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23,
3269    #[doc = "Roll: 0, Pitch: 90, Yaw: 0"]
3270    MAV_SENSOR_ROTATION_PITCH_90 = 24,
3271    #[doc = "Roll: 0, Pitch: 270, Yaw: 0"]
3272    MAV_SENSOR_ROTATION_PITCH_270 = 25,
3273    #[doc = "Roll: 0, Pitch: 180, Yaw: 90"]
3274    MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26,
3275    #[doc = "Roll: 0, Pitch: 180, Yaw: 270"]
3276    MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27,
3277    #[doc = "Roll: 90, Pitch: 90, Yaw: 0"]
3278    MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28,
3279    #[doc = "Roll: 180, Pitch: 90, Yaw: 0"]
3280    MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29,
3281    #[doc = "Roll: 270, Pitch: 90, Yaw: 0"]
3282    MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30,
3283    #[doc = "Roll: 90, Pitch: 180, Yaw: 0"]
3284    MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31,
3285    #[doc = "Roll: 270, Pitch: 180, Yaw: 0"]
3286    MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32,
3287    #[doc = "Roll: 90, Pitch: 270, Yaw: 0"]
3288    MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33,
3289    #[doc = "Roll: 180, Pitch: 270, Yaw: 0"]
3290    MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34,
3291    #[doc = "Roll: 270, Pitch: 270, Yaw: 0"]
3292    MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35,
3293    #[doc = "Roll: 90, Pitch: 180, Yaw: 90"]
3294    MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36,
3295    #[doc = "Roll: 90, Pitch: 0, Yaw: 270"]
3296    MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37,
3297    #[doc = "Roll: 90, Pitch: 68, Yaw: 293"]
3298    MAV_SENSOR_ROTATION_ROLL_90_PITCH_68_YAW_293 = 38,
3299    #[doc = "Pitch: 315"]
3300    MAV_SENSOR_ROTATION_PITCH_315 = 39,
3301    #[doc = "Roll: 90, Pitch: 315"]
3302    MAV_SENSOR_ROTATION_ROLL_90_PITCH_315 = 40,
3303    #[doc = "Custom orientation"]
3304    MAV_SENSOR_ROTATION_CUSTOM = 100,
3305}
3306impl MavSensorOrientation {
3307    pub const DEFAULT: Self = Self::MAV_SENSOR_ROTATION_NONE;
3308}
3309impl Default for MavSensorOrientation {
3310    fn default() -> Self {
3311        Self::DEFAULT
3312    }
3313}
3314#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3315#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3316#[cfg_attr(feature = "serde", serde(tag = "type"))]
3317#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3318#[repr(u32)]
3319#[doc = "Indicates the severity level, generally used for status messages to indicate their relative urgency. Based on RFC-5424 using expanded definitions at: <http://www.kiwisyslog.com/kb/info:-syslog-message-levels/>."]
3320pub enum MavSeverity {
3321    #[doc = "System is unusable. This is a \"panic\" condition."]
3322    MAV_SEVERITY_EMERGENCY = 0,
3323    #[doc = "Action should be taken immediately. Indicates error in non-critical systems."]
3324    MAV_SEVERITY_ALERT = 1,
3325    #[doc = "Action must be taken immediately. Indicates failure in a primary system."]
3326    MAV_SEVERITY_CRITICAL = 2,
3327    #[doc = "Indicates an error in secondary/redundant systems."]
3328    MAV_SEVERITY_ERROR = 3,
3329    #[doc = "Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning."]
3330    MAV_SEVERITY_WARNING = 4,
3331    #[doc = "An unusual event has occurred, though not an error condition. This should be investigated for the root cause."]
3332    MAV_SEVERITY_NOTICE = 5,
3333    #[doc = "Normal operational messages. Useful for logging. No action is required for these messages."]
3334    MAV_SEVERITY_INFO = 6,
3335    #[doc = "Useful non-operational messages that can assist in debugging. These should not occur during normal operation."]
3336    MAV_SEVERITY_DEBUG = 7,
3337}
3338impl MavSeverity {
3339    pub const DEFAULT: Self = Self::MAV_SEVERITY_EMERGENCY;
3340}
3341impl Default for MavSeverity {
3342    fn default() -> Self {
3343        Self::DEFAULT
3344    }
3345}
3346#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3347#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3348#[cfg_attr(feature = "serde", serde(tag = "type"))]
3349#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3350#[repr(u32)]
3351#[doc = "Standard modes with a well understood meaning across flight stacks and vehicle types.         For example, most flight stack have the concept of a \"return\" or \"RTL\" mode that takes a vehicle to safety, even though the precise mechanics of this mode may differ.         The modes supported by a flight stack can be queried using AVAILABLE_MODES and set using MAV_CMD_DO_SET_STANDARD_MODE.         The current mode is streamed in CURRENT_MODE.         See <https://mavlink.io/en/services/standard_modes.html>"]
3352pub enum MavStandardMode {
3353    #[doc = "Non standard mode.           This may be used when reporting the mode if the current flight mode is not a standard mode."]
3354    MAV_STANDARD_MODE_NON_STANDARD = 0,
3355    #[doc = "Position mode (manual).           Position-controlled and stabilized manual mode.           When sticks are released vehicles return to their level-flight orientation and hold both position and altitude against wind and external forces.           This mode can only be set by vehicles that can hold a fixed position.           Multicopter (MC) vehicles actively brake and hold both position and altitude against wind and external forces.           Hybrid MC/FW (\"VTOL\") vehicles first transition to multicopter mode (if needed) but otherwise behave in the same way as MC vehicles.           Fixed-wing (FW) vehicles must not support this mode.           Other vehicle types must not support this mode (this may be revisited through the PR process)."]
3356    MAV_STANDARD_MODE_POSITION_HOLD = 1,
3357    #[doc = "Orbit (manual).           Position-controlled and stabilized manual mode.           The vehicle circles around a fixed setpoint in the horizontal plane at a particular radius, altitude, and direction.           Flight stacks may further allow manual control over the setpoint position, radius, direction, speed, and/or altitude of the circle, but this is not mandated.           Flight stacks may support the [MAV_CMD_DO_ORBIT](<https://mavlink.io/en/messages/common.html#MAV_CMD_DO_ORBIT>) for changing the orbit parameters.           MC and FW vehicles may support this mode.           Hybrid MC/FW (\"VTOL\") vehicles may support this mode in MC/FW or both modes; if the mode is not supported by the current configuration the vehicle should transition to the supported configuration.           Other vehicle types must not support this mode (this may be revisited through the PR process)."]
3358    MAV_STANDARD_MODE_ORBIT = 2,
3359    #[doc = "Cruise mode (manual).           Position-controlled and stabilized manual mode.           When sticks are released vehicles return to their level-flight orientation and hold their original track against wind and external forces.           Fixed-wing (FW) vehicles level orientation and maintain current track and altitude against wind and external forces.           Hybrid MC/FW (\"VTOL\") vehicles first transition to FW mode (if needed) but otherwise behave in the same way as MC vehicles.           Multicopter (MC) vehicles must not support this mode.           Other vehicle types must not support this mode (this may be revisited through the PR process)."]
3360    MAV_STANDARD_MODE_CRUISE = 3,
3361    #[doc = "Altitude hold (manual).           Altitude-controlled and stabilized manual mode.           When sticks are released vehicles return to their level-flight orientation and hold their altitude.           MC vehicles continue with existing momentum and may move with wind (or other external forces).           FW vehicles continue with current heading, but may be moved off-track by wind.           Hybrid MC/FW (\"VTOL\") vehicles behave according to their current configuration/mode (FW or MC).           Other vehicle types must not support this mode (this may be revisited through the PR process)."]
3362    MAV_STANDARD_MODE_ALTITUDE_HOLD = 4,
3363    #[doc = "Safe recovery mode (auto).           Automatic mode that takes vehicle to a predefined safe location via a safe flight path, and may also automatically land the vehicle.           This mode is more commonly referred to as RTL and/or or Smart RTL.           The precise return location, flight path, and landing behaviour depend on vehicle configuration and type.           For example, the vehicle might return to the home/launch location, a rally point, or the start of a mission landing, it might follow a direct path, mission path, or breadcrumb path, and land using a mission landing pattern or some other kind of descent."]
3364    MAV_STANDARD_MODE_SAFE_RECOVERY = 5,
3365    #[doc = "Mission mode (automatic).           Automatic mode that executes MAVLink missions.           Missions are executed from the current waypoint as soon as the mode is enabled."]
3366    MAV_STANDARD_MODE_MISSION = 6,
3367    #[doc = "Land mode (auto).           Automatic mode that lands the vehicle at the current location.           The precise landing behaviour depends on vehicle configuration and type."]
3368    MAV_STANDARD_MODE_LAND = 7,
3369    #[doc = "Takeoff mode (auto).           Automatic takeoff mode.           The precise takeoff behaviour depends on vehicle configuration and type."]
3370    MAV_STANDARD_MODE_TAKEOFF = 8,
3371}
3372impl MavStandardMode {
3373    pub const DEFAULT: Self = Self::MAV_STANDARD_MODE_NON_STANDARD;
3374}
3375impl Default for MavStandardMode {
3376    fn default() -> Self {
3377        Self::DEFAULT
3378    }
3379}
3380#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3381#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3382#[cfg_attr(feature = "serde", serde(tag = "type"))]
3383#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3384#[repr(u32)]
3385pub enum MavState {
3386    #[doc = "Uninitialized system, state is unknown."]
3387    MAV_STATE_UNINIT = 0,
3388    #[doc = "System is booting up."]
3389    MAV_STATE_BOOT = 1,
3390    #[doc = "System is calibrating and not flight-ready."]
3391    MAV_STATE_CALIBRATING = 2,
3392    #[doc = "System is grounded and on standby. It can be launched any time."]
3393    MAV_STATE_STANDBY = 3,
3394    #[doc = "System is active and might be already airborne. Motors are engaged."]
3395    MAV_STATE_ACTIVE = 4,
3396    #[doc = "System is in a non-normal flight mode (failsafe). It can however still navigate."]
3397    MAV_STATE_CRITICAL = 5,
3398    #[doc = "System is in a non-normal flight mode (failsafe). It lost control over parts or over the whole airframe. It is in mayday and going down."]
3399    MAV_STATE_EMERGENCY = 6,
3400    #[doc = "System just initialized its power-down sequence, will shut down now."]
3401    MAV_STATE_POWEROFF = 7,
3402    #[doc = "System is terminating itself (failsafe or commanded)."]
3403    MAV_STATE_FLIGHT_TERMINATION = 8,
3404}
3405impl MavState {
3406    pub const DEFAULT: Self = Self::MAV_STATE_UNINIT;
3407}
3408impl Default for MavState {
3409    fn default() -> Self {
3410        Self::DEFAULT
3411    }
3412}
3413bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "These encode the sensors whose status is sent as part of the SYS_STATUS message."] pub struct MavSysStatusSensor : u32 { # [doc = "0x01 3D gyro"] const MAV_SYS_STATUS_SENSOR_3D_GYRO = 1 ; # [doc = "0x02 3D accelerometer"] const MAV_SYS_STATUS_SENSOR_3D_ACCEL = 2 ; # [doc = "0x04 3D magnetometer"] const MAV_SYS_STATUS_SENSOR_3D_MAG = 4 ; # [doc = "0x08 absolute pressure"] const MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE = 8 ; # [doc = "0x10 differential pressure"] const MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE = 16 ; # [doc = "0x20 GPS"] const MAV_SYS_STATUS_SENSOR_GPS = 32 ; # [doc = "0x40 optical flow"] const MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW = 64 ; # [doc = "0x80 computer vision position"] const MAV_SYS_STATUS_SENSOR_VISION_POSITION = 128 ; # [doc = "0x100 laser based position"] const MAV_SYS_STATUS_SENSOR_LASER_POSITION = 256 ; # [doc = "0x200 external ground truth (Vicon or Leica)"] const MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH = 512 ; # [doc = "0x400 3D angular rate control"] const MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL = 1024 ; # [doc = "0x800 attitude stabilization"] const MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION = 2048 ; # [doc = "0x1000 yaw position"] const MAV_SYS_STATUS_SENSOR_YAW_POSITION = 4096 ; # [doc = "0x2000 z/altitude control"] const MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL = 8192 ; # [doc = "0x4000 x/y position control"] const MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL = 16384 ; # [doc = "0x8000 motor outputs / control"] const MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS = 32768 ; # [doc = "0x10000 RC receiver"] const MAV_SYS_STATUS_SENSOR_RC_RECEIVER = 65536 ; # [doc = "0x20000 2nd 3D gyro"] const MAV_SYS_STATUS_SENSOR_3D_GYRO2 = 131072 ; # [doc = "0x40000 2nd 3D accelerometer"] const MAV_SYS_STATUS_SENSOR_3D_ACCEL2 = 262144 ; # [doc = "0x80000 2nd 3D magnetometer"] const MAV_SYS_STATUS_SENSOR_3D_MAG2 = 524288 ; # [doc = "0x100000 geofence"] const MAV_SYS_STATUS_GEOFENCE = 1048576 ; # [doc = "0x200000 AHRS subsystem health"] const MAV_SYS_STATUS_AHRS = 2097152 ; # [doc = "0x400000 Terrain subsystem health"] const MAV_SYS_STATUS_TERRAIN = 4194304 ; # [doc = "0x800000 Motors are reversed"] const MAV_SYS_STATUS_REVERSE_MOTOR = 8388608 ; # [doc = "0x1000000 Logging"] const MAV_SYS_STATUS_LOGGING = 16777216 ; # [doc = "0x2000000 Battery"] const MAV_SYS_STATUS_SENSOR_BATTERY = 33554432 ; # [doc = "0x4000000 Proximity"] const MAV_SYS_STATUS_SENSOR_PROXIMITY = 67108864 ; # [doc = "0x8000000 Satellite Communication"] const MAV_SYS_STATUS_SENSOR_SATCOM = 134217728 ; # [doc = "0x10000000 pre-arm check status. Always healthy when armed"] const MAV_SYS_STATUS_PREARM_CHECK = 268435456 ; # [doc = "0x20000000 Avoidance/collision prevention"] const MAV_SYS_STATUS_OBSTACLE_AVOIDANCE = 536870912 ; # [doc = "0x40000000 propulsion (actuator, esc, motor or propellor)"] const MAV_SYS_STATUS_SENSOR_PROPULSION = 1073741824 ; # [doc = "0x80000000 Extended bit-field are used for further sensor status bits (needs to be set in onboard_control_sensors_present only)"] const MAV_SYS_STATUS_EXTENSION_USED = 2147483648 ; } }
3414impl MavSysStatusSensor {
3415    pub const DEFAULT: Self = Self::MAV_SYS_STATUS_SENSOR_3D_GYRO;
3416}
3417impl Default for MavSysStatusSensor {
3418    fn default() -> Self {
3419        Self::DEFAULT
3420    }
3421}
3422bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "These encode the sensors whose status is sent as part of the SYS_STATUS message in the extended fields."] pub struct MavSysStatusSensorExtended : u32 { # [doc = "0x01 Recovery system (parachute, balloon, retracts etc)"] const MAV_SYS_STATUS_RECOVERY_SYSTEM = 1 ; } }
3423impl MavSysStatusSensorExtended {
3424    pub const DEFAULT: Self = Self::MAV_SYS_STATUS_RECOVERY_SYSTEM;
3425}
3426impl Default for MavSysStatusSensorExtended {
3427    fn default() -> Self {
3428        Self::DEFAULT
3429    }
3430}
3431#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3432#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3433#[cfg_attr(feature = "serde", serde(tag = "type"))]
3434#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3435#[repr(u32)]
3436pub enum MavTunnelPayloadType {
3437    #[doc = "Encoding of payload unknown."]
3438    MAV_TUNNEL_PAYLOAD_TYPE_UNKNOWN = 0,
3439    #[doc = "Registered for STorM32 gimbal controller."]
3440    MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED0 = 200,
3441    #[doc = "Registered for STorM32 gimbal controller."]
3442    MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED1 = 201,
3443    #[doc = "Registered for STorM32 gimbal controller."]
3444    MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED2 = 202,
3445    #[doc = "Registered for STorM32 gimbal controller."]
3446    MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED3 = 203,
3447    #[doc = "Registered for STorM32 gimbal controller."]
3448    MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED4 = 204,
3449    #[doc = "Registered for STorM32 gimbal controller."]
3450    MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED5 = 205,
3451    #[doc = "Registered for STorM32 gimbal controller."]
3452    MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED6 = 206,
3453    #[doc = "Registered for STorM32 gimbal controller."]
3454    MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED7 = 207,
3455    #[doc = "Registered for STorM32 gimbal controller."]
3456    MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED8 = 208,
3457    #[doc = "Registered for STorM32 gimbal controller."]
3458    MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED9 = 209,
3459    #[doc = "Registered for ModalAI remote OSD protocol."]
3460    MAV_TUNNEL_PAYLOAD_TYPE_MODALAI_REMOTE_OSD = 210,
3461    #[doc = "Registered for ModalAI ESC UART passthru protocol."]
3462    MAV_TUNNEL_PAYLOAD_TYPE_MODALAI_ESC_UART_PASSTHRU = 211,
3463    #[doc = "Registered for ModalAI vendor use."]
3464    MAV_TUNNEL_PAYLOAD_TYPE_MODALAI_IO_UART_PASSTHRU = 212,
3465}
3466impl MavTunnelPayloadType {
3467    pub const DEFAULT: Self = Self::MAV_TUNNEL_PAYLOAD_TYPE_UNKNOWN;
3468}
3469impl Default for MavTunnelPayloadType {
3470    fn default() -> Self {
3471        Self::DEFAULT
3472    }
3473}
3474#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3475#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3476#[cfg_attr(feature = "serde", serde(tag = "type"))]
3477#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3478#[repr(u32)]
3479#[doc = "MAVLINK component type reported in HEARTBEAT message. Flight controllers must report the type of the vehicle on which they are mounted (e.g. MAV_TYPE_OCTOROTOR). All other components must report a value appropriate for their type (e.g. a camera must use MAV_TYPE_CAMERA)."]
3480pub enum MavType {
3481    #[doc = "Generic micro air vehicle"]
3482    MAV_TYPE_GENERIC = 0,
3483    #[doc = "Fixed wing aircraft."]
3484    MAV_TYPE_FIXED_WING = 1,
3485    #[doc = "Quadrotor"]
3486    MAV_TYPE_QUADROTOR = 2,
3487    #[doc = "Coaxial helicopter"]
3488    MAV_TYPE_COAXIAL = 3,
3489    #[doc = "Normal helicopter with tail rotor."]
3490    MAV_TYPE_HELICOPTER = 4,
3491    #[doc = "Ground installation"]
3492    MAV_TYPE_ANTENNA_TRACKER = 5,
3493    #[doc = "Operator control unit / ground control station"]
3494    MAV_TYPE_GCS = 6,
3495    #[doc = "Airship, controlled"]
3496    MAV_TYPE_AIRSHIP = 7,
3497    #[doc = "Free balloon, uncontrolled"]
3498    MAV_TYPE_FREE_BALLOON = 8,
3499    #[doc = "Rocket"]
3500    MAV_TYPE_ROCKET = 9,
3501    #[doc = "Ground rover"]
3502    MAV_TYPE_GROUND_ROVER = 10,
3503    #[doc = "Surface vessel, boat, ship"]
3504    MAV_TYPE_SURFACE_BOAT = 11,
3505    #[doc = "Submarine"]
3506    MAV_TYPE_SUBMARINE = 12,
3507    #[doc = "Hexarotor"]
3508    MAV_TYPE_HEXAROTOR = 13,
3509    #[doc = "Octorotor"]
3510    MAV_TYPE_OCTOROTOR = 14,
3511    #[doc = "Tricopter"]
3512    MAV_TYPE_TRICOPTER = 15,
3513    #[doc = "Flapping wing"]
3514    MAV_TYPE_FLAPPING_WING = 16,
3515    #[doc = "Kite"]
3516    MAV_TYPE_KITE = 17,
3517    #[doc = "Onboard companion controller"]
3518    MAV_TYPE_ONBOARD_CONTROLLER = 18,
3519    #[doc = "Two-rotor Tailsitter VTOL that additionally uses control surfaces in vertical operation. Note, value previously named MAV_TYPE_VTOL_DUOROTOR."]
3520    MAV_TYPE_VTOL_TAILSITTER_DUOROTOR = 19,
3521    #[doc = "Quad-rotor Tailsitter VTOL using a V-shaped quad config in vertical operation. Note: value previously named MAV_TYPE_VTOL_QUADROTOR."]
3522    MAV_TYPE_VTOL_TAILSITTER_QUADROTOR = 20,
3523    #[doc = "Tiltrotor VTOL. Fuselage and wings stay (nominally) horizontal in all flight phases. It able to tilt (some) rotors to provide thrust in cruise flight."]
3524    MAV_TYPE_VTOL_TILTROTOR = 21,
3525    #[doc = "VTOL with separate fixed rotors for hover and cruise flight. Fuselage and wings stay (nominally) horizontal in all flight phases."]
3526    MAV_TYPE_VTOL_FIXEDROTOR = 22,
3527    #[doc = "Tailsitter VTOL. Fuselage and wings orientation changes depending on flight phase: vertical for hover, horizontal for cruise. Use more specific VTOL MAV_TYPE_VTOL_TAILSITTER_DUOROTOR or MAV_TYPE_VTOL_TAILSITTER_QUADROTOR if appropriate."]
3528    MAV_TYPE_VTOL_TAILSITTER = 23,
3529    #[doc = "Tiltwing VTOL. Fuselage stays horizontal in all flight phases. The whole wing, along with any attached engine, can tilt between vertical and horizontal mode."]
3530    MAV_TYPE_VTOL_TILTWING = 24,
3531    #[doc = "VTOL reserved 5"]
3532    MAV_TYPE_VTOL_RESERVED5 = 25,
3533    #[doc = "Gimbal"]
3534    MAV_TYPE_GIMBAL = 26,
3535    #[doc = "ADSB system"]
3536    MAV_TYPE_ADSB = 27,
3537    #[doc = "Steerable, nonrigid airfoil"]
3538    MAV_TYPE_PARAFOIL = 28,
3539    #[doc = "Dodecarotor"]
3540    MAV_TYPE_DODECAROTOR = 29,
3541    #[doc = "Camera"]
3542    MAV_TYPE_CAMERA = 30,
3543    #[doc = "Charging station"]
3544    MAV_TYPE_CHARGING_STATION = 31,
3545    #[doc = "FLARM collision avoidance system"]
3546    MAV_TYPE_FLARM = 32,
3547    #[doc = "Servo"]
3548    MAV_TYPE_SERVO = 33,
3549    #[doc = "Open Drone ID. See <https://mavlink.io/en/services/opendroneid.html>."]
3550    MAV_TYPE_ODID = 34,
3551    #[doc = "Decarotor"]
3552    MAV_TYPE_DECAROTOR = 35,
3553    #[doc = "Battery"]
3554    MAV_TYPE_BATTERY = 36,
3555    #[doc = "Parachute"]
3556    MAV_TYPE_PARACHUTE = 37,
3557    #[doc = "Log"]
3558    MAV_TYPE_LOG = 38,
3559    #[doc = "OSD"]
3560    MAV_TYPE_OSD = 39,
3561    #[doc = "IMU"]
3562    MAV_TYPE_IMU = 40,
3563    #[doc = "GPS"]
3564    MAV_TYPE_GPS = 41,
3565    #[doc = "Winch"]
3566    MAV_TYPE_WINCH = 42,
3567    #[doc = "Generic multirotor that does not fit into a specific type or whose type is unknown"]
3568    MAV_TYPE_GENERIC_MULTIROTOR = 43,
3569    #[doc = "Illuminator. An illuminator is a light source that is used for lighting up dark areas external to the sytstem: e.g. a torch or searchlight (as opposed to a light source for illuminating the system itself, e.g. an indicator light)."]
3570    MAV_TYPE_ILLUMINATOR = 44,
3571    #[doc = "Orbiter spacecraft. Includes satellites orbiting terrestrial and extra-terrestrial bodies. Follows NASA Spacecraft Classification."]
3572    MAV_TYPE_SPACECRAFT_ORBITER = 45,
3573}
3574impl MavType {
3575    pub const DEFAULT: Self = Self::MAV_TYPE_GENERIC;
3576}
3577impl Default for MavType {
3578    fn default() -> Self {
3579        Self::DEFAULT
3580    }
3581}
3582#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3583#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3584#[cfg_attr(feature = "serde", serde(tag = "type"))]
3585#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3586#[repr(u32)]
3587#[doc = "Enumeration of VTOL states"]
3588pub enum MavVtolState {
3589    #[doc = "MAV is not configured as VTOL"]
3590    MAV_VTOL_STATE_UNDEFINED = 0,
3591    #[doc = "VTOL is in transition from multicopter to fixed-wing"]
3592    MAV_VTOL_STATE_TRANSITION_TO_FW = 1,
3593    #[doc = "VTOL is in transition from fixed-wing to multicopter"]
3594    MAV_VTOL_STATE_TRANSITION_TO_MC = 2,
3595    #[doc = "VTOL is in multicopter state"]
3596    MAV_VTOL_STATE_MC = 3,
3597    #[doc = "VTOL is in fixed-wing state"]
3598    MAV_VTOL_STATE_FW = 4,
3599}
3600impl MavVtolState {
3601    pub const DEFAULT: Self = Self::MAV_VTOL_STATE_UNDEFINED;
3602}
3603impl Default for MavVtolState {
3604    fn default() -> Self {
3605        Self::DEFAULT
3606    }
3607}
3608bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Winch status flags used in WINCH_STATUS"] pub struct MavWinchStatusFlag : u32 { # [doc = "Winch is healthy"] const MAV_WINCH_STATUS_HEALTHY = 1 ; # [doc = "Winch line is fully retracted"] const MAV_WINCH_STATUS_FULLY_RETRACTED = 2 ; # [doc = "Winch motor is moving"] const MAV_WINCH_STATUS_MOVING = 4 ; # [doc = "Winch clutch is engaged allowing motor to move freely."] const MAV_WINCH_STATUS_CLUTCH_ENGAGED = 8 ; # [doc = "Winch is locked by locking mechanism."] const MAV_WINCH_STATUS_LOCKED = 16 ; # [doc = "Winch is gravity dropping payload."] const MAV_WINCH_STATUS_DROPPING = 32 ; # [doc = "Winch is arresting payload descent."] const MAV_WINCH_STATUS_ARRESTING = 64 ; # [doc = "Winch is using torque measurements to sense the ground."] const MAV_WINCH_STATUS_GROUND_SENSE = 128 ; # [doc = "Winch is returning to the fully retracted position."] const MAV_WINCH_STATUS_RETRACTING = 256 ; # [doc = "Winch is redelivering the payload. This is a failover state if the line tension goes above a threshold during RETRACTING."] const MAV_WINCH_STATUS_REDELIVER = 512 ; # [doc = "Winch is abandoning the line and possibly payload. Winch unspools the entire calculated line length. This is a failover state from REDELIVER if the number of attempts exceeds a threshold."] const MAV_WINCH_STATUS_ABANDON_LINE = 1024 ; # [doc = "Winch is engaging the locking mechanism."] const MAV_WINCH_STATUS_LOCKING = 2048 ; # [doc = "Winch is spooling on line."] const MAV_WINCH_STATUS_LOAD_LINE = 4096 ; # [doc = "Winch is loading a payload."] const MAV_WINCH_STATUS_LOAD_PAYLOAD = 8192 ; } }
3609impl MavWinchStatusFlag {
3610    pub const DEFAULT: Self = Self::MAV_WINCH_STATUS_HEALTHY;
3611}
3612impl Default for MavWinchStatusFlag {
3613    fn default() -> Self {
3614        Self::DEFAULT
3615    }
3616}
3617#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3618#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3619#[cfg_attr(feature = "serde", serde(tag = "type"))]
3620#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3621#[repr(u32)]
3622pub enum MavlinkDataStreamType {
3623    MAVLINK_DATA_STREAM_IMG_JPEG = 0,
3624    MAVLINK_DATA_STREAM_IMG_BMP = 1,
3625    MAVLINK_DATA_STREAM_IMG_RAW8U = 2,
3626    MAVLINK_DATA_STREAM_IMG_RAW32U = 3,
3627    MAVLINK_DATA_STREAM_IMG_PGM = 4,
3628    MAVLINK_DATA_STREAM_IMG_PNG = 5,
3629}
3630impl MavlinkDataStreamType {
3631    pub const DEFAULT: Self = Self::MAVLINK_DATA_STREAM_IMG_JPEG;
3632}
3633impl Default for MavlinkDataStreamType {
3634    fn default() -> Self {
3635        Self::DEFAULT
3636    }
3637}
3638#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3639#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3640#[cfg_attr(feature = "serde", serde(tag = "type"))]
3641#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3642#[repr(u32)]
3643#[doc = "States of the mission state machine.         Note that these states are independent of whether the mission is in a mode that can execute mission items or not (is suspended).         They may not all be relevant on all vehicles."]
3644pub enum MissionState {
3645    #[doc = "The mission status reporting is not supported."]
3646    MISSION_STATE_UNKNOWN = 0,
3647    #[doc = "No mission on the vehicle."]
3648    MISSION_STATE_NO_MISSION = 1,
3649    #[doc = "Mission has not started. This is the case after a mission has uploaded but not yet started executing."]
3650    MISSION_STATE_NOT_STARTED = 2,
3651    #[doc = "Mission is active, and will execute mission items when in auto mode."]
3652    MISSION_STATE_ACTIVE = 3,
3653    #[doc = "Mission is paused when in auto mode."]
3654    MISSION_STATE_PAUSED = 4,
3655    #[doc = "Mission has executed all mission items."]
3656    MISSION_STATE_COMPLETE = 5,
3657}
3658impl MissionState {
3659    pub const DEFAULT: Self = Self::MISSION_STATE_UNKNOWN;
3660}
3661impl Default for MissionState {
3662    fn default() -> Self {
3663        Self::DEFAULT
3664    }
3665}
3666#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3667#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3668#[cfg_attr(feature = "serde", serde(tag = "type"))]
3669#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3670#[repr(u32)]
3671#[doc = "Sequence that motors are tested when using MAV_CMD_DO_MOTOR_TEST."]
3672pub enum MotorTestOrder {
3673    #[doc = "Default autopilot motor test method."]
3674    MOTOR_TEST_ORDER_DEFAULT = 0,
3675    #[doc = "Motor numbers are specified as their index in a predefined vehicle-specific sequence."]
3676    MOTOR_TEST_ORDER_SEQUENCE = 1,
3677    #[doc = "Motor numbers are specified as the output as labeled on the board."]
3678    MOTOR_TEST_ORDER_BOARD = 2,
3679}
3680impl MotorTestOrder {
3681    pub const DEFAULT: Self = Self::MOTOR_TEST_ORDER_DEFAULT;
3682}
3683impl Default for MotorTestOrder {
3684    fn default() -> Self {
3685        Self::DEFAULT
3686    }
3687}
3688#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3689#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3690#[cfg_attr(feature = "serde", serde(tag = "type"))]
3691#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3692#[repr(u32)]
3693#[doc = "Defines how throttle value is represented in MAV_CMD_DO_MOTOR_TEST."]
3694pub enum MotorTestThrottleType {
3695    #[doc = "Throttle as a percentage (0 ~ 100)"]
3696    MOTOR_TEST_THROTTLE_PERCENT = 0,
3697    #[doc = "Throttle as an absolute PWM value (normally in range of 1000~2000)."]
3698    MOTOR_TEST_THROTTLE_PWM = 1,
3699    #[doc = "Throttle pass-through from pilot's transmitter."]
3700    MOTOR_TEST_THROTTLE_PILOT = 2,
3701    #[doc = "Per-motor compass calibration test."]
3702    MOTOR_TEST_COMPASS_CAL = 3,
3703}
3704impl MotorTestThrottleType {
3705    pub const DEFAULT: Self = Self::MOTOR_TEST_THROTTLE_PERCENT;
3706}
3707impl Default for MotorTestThrottleType {
3708    fn default() -> Self {
3709        Self::DEFAULT
3710    }
3711}
3712#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3713#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3714#[cfg_attr(feature = "serde", serde(tag = "type"))]
3715#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3716#[repr(u32)]
3717pub enum NavVtolLandOptions {
3718    #[doc = "Default autopilot landing behaviour."]
3719    NAV_VTOL_LAND_OPTIONS_DEFAULT = 0,
3720    #[doc = "Descend in fixed wing mode, transitioning to multicopter mode for vertical landing when close to the ground.           The fixed wing descent pattern is at the discretion of the vehicle (e.g. transition altitude, loiter direction, radius, and speed, etc.)."]
3721    NAV_VTOL_LAND_OPTIONS_FW_DESCENT = 1,
3722    #[doc = "Land in multicopter mode on reaching the landing coordinates (the whole landing is by \"hover descent\")."]
3723    NAV_VTOL_LAND_OPTIONS_HOVER_DESCENT = 2,
3724}
3725impl NavVtolLandOptions {
3726    pub const DEFAULT: Self = Self::NAV_VTOL_LAND_OPTIONS_DEFAULT;
3727}
3728impl Default for NavVtolLandOptions {
3729    fn default() -> Self {
3730        Self::DEFAULT
3731    }
3732}
3733#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3734#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3735#[cfg_attr(feature = "serde", serde(tag = "type"))]
3736#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3737#[repr(u32)]
3738#[doc = "Yaw behaviour during orbit flight."]
3739pub enum OrbitYawBehaviour {
3740    #[doc = "Vehicle front points to the center (default)."]
3741    ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER = 0,
3742    #[doc = "Vehicle front holds heading when message received."]
3743    ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING = 1,
3744    #[doc = "Yaw uncontrolled."]
3745    ORBIT_YAW_BEHAVIOUR_UNCONTROLLED = 2,
3746    #[doc = "Vehicle front follows flight path (tangential to circle)."]
3747    ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE = 3,
3748    #[doc = "Yaw controlled by RC input."]
3749    ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED = 4,
3750    #[doc = "Vehicle uses current yaw behaviour (unchanged). The vehicle-default yaw behaviour is used if this value is specified when orbit is first commanded."]
3751    ORBIT_YAW_BEHAVIOUR_UNCHANGED = 5,
3752}
3753impl OrbitYawBehaviour {
3754    pub const DEFAULT: Self = Self::ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER;
3755}
3756impl Default for OrbitYawBehaviour {
3757    fn default() -> Self {
3758        Self::DEFAULT
3759    }
3760}
3761#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3762#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3763#[cfg_attr(feature = "serde", serde(tag = "type"))]
3764#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3765#[repr(u32)]
3766#[doc = "Parachute actions. Trigger release and enable/disable auto-release."]
3767pub enum ParachuteAction {
3768    #[doc = "Disable auto-release of parachute (i.e. release triggered by crash detectors)."]
3769    PARACHUTE_DISABLE = 0,
3770    #[doc = "Enable auto-release of parachute."]
3771    PARACHUTE_ENABLE = 1,
3772    #[doc = "Release parachute and kill motors."]
3773    PARACHUTE_RELEASE = 2,
3774}
3775impl ParachuteAction {
3776    pub const DEFAULT: Self = Self::PARACHUTE_DISABLE;
3777}
3778impl Default for ParachuteAction {
3779    fn default() -> Self {
3780        Self::DEFAULT
3781    }
3782}
3783#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3784#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3785#[cfg_attr(feature = "serde", serde(tag = "type"))]
3786#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3787#[repr(u32)]
3788#[doc = "Result from PARAM_EXT_SET message."]
3789pub enum ParamAck {
3790    #[doc = "Parameter value ACCEPTED and SET"]
3791    PARAM_ACK_ACCEPTED = 0,
3792    #[doc = "Parameter value UNKNOWN/UNSUPPORTED"]
3793    PARAM_ACK_VALUE_UNSUPPORTED = 1,
3794    #[doc = "Parameter failed to set"]
3795    PARAM_ACK_FAILED = 2,
3796    #[doc = "Parameter value received but not yet set/accepted. A subsequent PARAM_EXT_ACK with the final result will follow once operation is completed. This is returned immediately for parameters that take longer to set, indicating that the the parameter was received and does not need to be resent."]
3797    PARAM_ACK_IN_PROGRESS = 3,
3798}
3799impl ParamAck {
3800    pub const DEFAULT: Self = Self::PARAM_ACK_ACCEPTED;
3801}
3802impl Default for ParamAck {
3803    fn default() -> Self {
3804        Self::DEFAULT
3805    }
3806}
3807bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Bitmap to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 9 is set the floats afx afy afz should be interpreted as force instead of acceleration."] pub struct PositionTargetTypemask : u16 { # [doc = "Ignore position x"] const POSITION_TARGET_TYPEMASK_X_IGNORE = 1 ; # [doc = "Ignore position y"] const POSITION_TARGET_TYPEMASK_Y_IGNORE = 2 ; # [doc = "Ignore position z"] const POSITION_TARGET_TYPEMASK_Z_IGNORE = 4 ; # [doc = "Ignore velocity x"] const POSITION_TARGET_TYPEMASK_VX_IGNORE = 8 ; # [doc = "Ignore velocity y"] const POSITION_TARGET_TYPEMASK_VY_IGNORE = 16 ; # [doc = "Ignore velocity z"] const POSITION_TARGET_TYPEMASK_VZ_IGNORE = 32 ; # [doc = "Ignore acceleration x"] const POSITION_TARGET_TYPEMASK_AX_IGNORE = 64 ; # [doc = "Ignore acceleration y"] const POSITION_TARGET_TYPEMASK_AY_IGNORE = 128 ; # [doc = "Ignore acceleration z"] const POSITION_TARGET_TYPEMASK_AZ_IGNORE = 256 ; # [doc = "Use force instead of acceleration"] const POSITION_TARGET_TYPEMASK_FORCE_SET = 512 ; # [doc = "Ignore yaw"] const POSITION_TARGET_TYPEMASK_YAW_IGNORE = 1024 ; # [doc = "Ignore yaw rate"] const POSITION_TARGET_TYPEMASK_YAW_RATE_IGNORE = 2048 ; } }
3808impl PositionTargetTypemask {
3809    pub const DEFAULT: Self = Self::POSITION_TARGET_TYPEMASK_X_IGNORE;
3810}
3811impl Default for PositionTargetTypemask {
3812    fn default() -> Self {
3813        Self::DEFAULT
3814    }
3815}
3816#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3817#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3818#[cfg_attr(feature = "serde", serde(tag = "type"))]
3819#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3820#[repr(u32)]
3821#[doc = "Precision land modes (used in MAV_CMD_NAV_LAND)."]
3822pub enum PrecisionLandMode {
3823    #[doc = "Normal (non-precision) landing."]
3824    PRECISION_LAND_MODE_DISABLED = 0,
3825    #[doc = "Use precision landing if beacon detected when land command accepted, otherwise land normally."]
3826    PRECISION_LAND_MODE_OPPORTUNISTIC = 1,
3827    #[doc = "Use precision landing, searching for beacon if not found when land command accepted (land normally if beacon cannot be found)."]
3828    PRECISION_LAND_MODE_REQUIRED = 2,
3829}
3830impl PrecisionLandMode {
3831    pub const DEFAULT: Self = Self::PRECISION_LAND_MODE_DISABLED;
3832}
3833impl Default for PrecisionLandMode {
3834    fn default() -> Self {
3835        Self::DEFAULT
3836    }
3837}
3838#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3839#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3840#[cfg_attr(feature = "serde", serde(tag = "type"))]
3841#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3842#[repr(u32)]
3843#[doc = "Actions for reading and writing plan information (mission, rally points, geofence) between persistent and volatile storage when using MAV_CMD_PREFLIGHT_STORAGE.         (Commonly missions are loaded from persistent storage (flash/EEPROM) into volatile storage (RAM) on startup and written back when they are changed.)"]
3844pub enum PreflightStorageMissionAction {
3845    #[doc = "Read current mission data from persistent storage"]
3846    MISSION_READ_PERSISTENT = 0,
3847    #[doc = "Write current mission data to persistent storage"]
3848    MISSION_WRITE_PERSISTENT = 1,
3849    #[doc = "Erase all mission data stored on the vehicle (both persistent and volatile storage)"]
3850    MISSION_RESET_DEFAULT = 2,
3851}
3852impl PreflightStorageMissionAction {
3853    pub const DEFAULT: Self = Self::MISSION_READ_PERSISTENT;
3854}
3855impl Default for PreflightStorageMissionAction {
3856    fn default() -> Self {
3857        Self::DEFAULT
3858    }
3859}
3860#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3861#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3862#[cfg_attr(feature = "serde", serde(tag = "type"))]
3863#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3864#[repr(u32)]
3865#[doc = "Actions for reading/writing parameters between persistent and volatile storage when using MAV_CMD_PREFLIGHT_STORAGE.         (Commonly parameters are loaded from persistent storage (flash/EEPROM) into volatile storage (RAM) on startup and written back when they are changed.)"]
3866pub enum PreflightStorageParameterAction {
3867    #[doc = "Read all parameters from persistent storage. Replaces values in volatile storage."]
3868    PARAM_READ_PERSISTENT = 0,
3869    #[doc = "Write all parameter values to persistent storage (flash/EEPROM)"]
3870    PARAM_WRITE_PERSISTENT = 1,
3871    #[doc = "Reset all user configurable parameters to their default value (including airframe selection, sensor calibration data, safety settings, and so on). Does not reset values that contain operation counters and vehicle computed statistics."]
3872    PARAM_RESET_CONFIG_DEFAULT = 2,
3873    #[doc = "Reset only sensor calibration parameters to factory defaults (or firmware default if not available)"]
3874    PARAM_RESET_SENSOR_DEFAULT = 3,
3875    #[doc = "Reset all parameters, including operation counters, to default values"]
3876    PARAM_RESET_ALL_DEFAULT = 4,
3877}
3878impl PreflightStorageParameterAction {
3879    pub const DEFAULT: Self = Self::PARAM_READ_PERSISTENT;
3880}
3881impl Default for PreflightStorageParameterAction {
3882    fn default() -> Self {
3883        Self::DEFAULT
3884    }
3885}
3886#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3887#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3888#[cfg_attr(feature = "serde", serde(tag = "type"))]
3889#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3890#[repr(u32)]
3891#[doc = "RC sub-type of types defined in RC_TYPE. Used in MAV_CMD_START_RX_PAIR. Ignored if value does not correspond to the set RC_TYPE."]
3892pub enum RcSubType {
3893    #[doc = "Spektrum DSM2"]
3894    RC_SUB_TYPE_SPEKTRUM_DSM2 = 0,
3895    #[doc = "Spektrum DSMX"]
3896    RC_SUB_TYPE_SPEKTRUM_DSMX = 1,
3897    #[doc = "Spektrum DSMX8"]
3898    RC_SUB_TYPE_SPEKTRUM_DSMX8 = 2,
3899}
3900impl RcSubType {
3901    pub const DEFAULT: Self = Self::RC_SUB_TYPE_SPEKTRUM_DSM2;
3902}
3903impl Default for RcSubType {
3904    fn default() -> Self {
3905        Self::DEFAULT
3906    }
3907}
3908#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3909#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3910#[cfg_attr(feature = "serde", serde(tag = "type"))]
3911#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3912#[repr(u32)]
3913#[doc = "RC type. Used in MAV_CMD_START_RX_PAIR."]
3914pub enum RcType {
3915    #[doc = "Spektrum"]
3916    RC_TYPE_SPEKTRUM = 0,
3917    #[doc = "CRSF"]
3918    RC_TYPE_CRSF = 1,
3919}
3920impl RcType {
3921    pub const DEFAULT: Self = Self::RC_TYPE_SPEKTRUM;
3922}
3923impl Default for RcType {
3924    fn default() -> Self {
3925        Self::DEFAULT
3926    }
3927}
3928#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3929#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3930#[cfg_attr(feature = "serde", serde(tag = "type"))]
3931#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3932#[repr(u32)]
3933#[doc = "Specifies the conditions under which the MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN command should be accepted."]
3934pub enum RebootShutdownConditions {
3935    #[doc = "Reboot/Shutdown only if allowed by safety checks, such as being landed."]
3936    REBOOT_SHUTDOWN_CONDITIONS_SAFETY_INTERLOCKED = 0,
3937    #[doc = "Force reboot/shutdown of the autopilot/component regardless of system state."]
3938    REBOOT_SHUTDOWN_CONDITIONS_FORCE = 20190226,
3939}
3940impl RebootShutdownConditions {
3941    pub const DEFAULT: Self = Self::REBOOT_SHUTDOWN_CONDITIONS_SAFETY_INTERLOCKED;
3942}
3943impl Default for RebootShutdownConditions {
3944    fn default() -> Self {
3945        Self::DEFAULT
3946    }
3947}
3948#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3949#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3950#[cfg_attr(feature = "serde", serde(tag = "type"))]
3951#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3952#[repr(u32)]
3953#[doc = "RTK GPS baseline coordinate system, used for RTK corrections"]
3954pub enum RtkBaselineCoordinateSystem {
3955    #[doc = "Earth-centered, Earth-fixed"]
3956    RTK_BASELINE_COORDINATE_SYSTEM_ECEF = 0,
3957    #[doc = "RTK basestation centered, north, east, down"]
3958    RTK_BASELINE_COORDINATE_SYSTEM_NED = 1,
3959}
3960impl RtkBaselineCoordinateSystem {
3961    pub const DEFAULT: Self = Self::RTK_BASELINE_COORDINATE_SYSTEM_ECEF;
3962}
3963impl Default for RtkBaselineCoordinateSystem {
3964    fn default() -> Self {
3965        Self::DEFAULT
3966    }
3967}
3968#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3969#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3970#[cfg_attr(feature = "serde", serde(tag = "type"))]
3971#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3972#[repr(u32)]
3973#[doc = "Possible safety switch states."]
3974pub enum SafetySwitchState {
3975    #[doc = "Safety switch is engaged and vehicle should be safe to approach."]
3976    SAFETY_SWITCH_STATE_SAFE = 0,
3977    #[doc = "Safety switch is NOT engaged and motors, propellers and other actuators should be considered active."]
3978    SAFETY_SWITCH_STATE_DANGEROUS = 1,
3979}
3980impl SafetySwitchState {
3981    pub const DEFAULT: Self = Self::SAFETY_SWITCH_STATE_SAFE;
3982}
3983impl Default for SafetySwitchState {
3984    fn default() -> Self {
3985        Self::DEFAULT
3986    }
3987}
3988#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
3989#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3990#[cfg_attr(feature = "serde", serde(tag = "type"))]
3991#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
3992#[repr(u32)]
3993#[doc = "SERIAL_CONTROL device types"]
3994pub enum SerialControlDev {
3995    #[doc = "First telemetry port"]
3996    SERIAL_CONTROL_DEV_TELEM1 = 0,
3997    #[doc = "Second telemetry port"]
3998    SERIAL_CONTROL_DEV_TELEM2 = 1,
3999    #[doc = "First GPS port"]
4000    SERIAL_CONTROL_DEV_GPS1 = 2,
4001    #[doc = "Second GPS port"]
4002    SERIAL_CONTROL_DEV_GPS2 = 3,
4003    #[doc = "system shell"]
4004    SERIAL_CONTROL_DEV_SHELL = 10,
4005    #[doc = "SERIAL0"]
4006    SERIAL_CONTROL_SERIAL0 = 100,
4007    #[doc = "SERIAL1"]
4008    SERIAL_CONTROL_SERIAL1 = 101,
4009    #[doc = "SERIAL2"]
4010    SERIAL_CONTROL_SERIAL2 = 102,
4011    #[doc = "SERIAL3"]
4012    SERIAL_CONTROL_SERIAL3 = 103,
4013    #[doc = "SERIAL4"]
4014    SERIAL_CONTROL_SERIAL4 = 104,
4015    #[doc = "SERIAL5"]
4016    SERIAL_CONTROL_SERIAL5 = 105,
4017    #[doc = "SERIAL6"]
4018    SERIAL_CONTROL_SERIAL6 = 106,
4019    #[doc = "SERIAL7"]
4020    SERIAL_CONTROL_SERIAL7 = 107,
4021    #[doc = "SERIAL8"]
4022    SERIAL_CONTROL_SERIAL8 = 108,
4023    #[doc = "SERIAL9"]
4024    SERIAL_CONTROL_SERIAL9 = 109,
4025}
4026impl SerialControlDev {
4027    pub const DEFAULT: Self = Self::SERIAL_CONTROL_DEV_TELEM1;
4028}
4029impl Default for SerialControlDev {
4030    fn default() -> Self {
4031        Self::DEFAULT
4032    }
4033}
4034bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "SERIAL_CONTROL flags (bitmask)"] pub struct SerialControlFlag : u8 { # [doc = "Set if this is a reply"] const SERIAL_CONTROL_FLAG_REPLY = 1 ; # [doc = "Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message"] const SERIAL_CONTROL_FLAG_RESPOND = 2 ; # [doc = "Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set"] const SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 ; # [doc = "Block on writes to the serial port"] const SERIAL_CONTROL_FLAG_BLOCKING = 8 ; # [doc = "Send multiple replies until port is drained"] const SERIAL_CONTROL_FLAG_MULTI = 16 ; } }
4035impl SerialControlFlag {
4036    pub const DEFAULT: Self = Self::SERIAL_CONTROL_FLAG_REPLY;
4037}
4038impl Default for SerialControlFlag {
4039    fn default() -> Self {
4040        Self::DEFAULT
4041    }
4042}
4043#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4044#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4045#[cfg_attr(feature = "serde", serde(tag = "type"))]
4046#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4047#[repr(u32)]
4048#[doc = "Focus types for MAV_CMD_SET_CAMERA_FOCUS"]
4049pub enum SetFocusType {
4050    #[doc = "Focus one step increment (-1 for focusing in, 1 for focusing out towards infinity)."]
4051    FOCUS_TYPE_STEP = 0,
4052    #[doc = "Continuous normalized focus in/out rate until stopped. Range -1..1, negative: in, positive: out towards infinity, 0 to stop focusing. Other values should be clipped to the range."]
4053    FOCUS_TYPE_CONTINUOUS = 1,
4054    #[doc = "Focus value as proportion of full camera focus range (a value between 0.0 and 100.0)"]
4055    FOCUS_TYPE_RANGE = 2,
4056    #[doc = "Focus value in metres. Note that there is no message to get the valid focus range of the camera, so this can type can only be used for cameras where the range is known (implying that this cannot reliably be used in a GCS for an arbitrary camera)."]
4057    FOCUS_TYPE_METERS = 3,
4058    #[doc = "Focus automatically."]
4059    FOCUS_TYPE_AUTO = 4,
4060    #[doc = "Single auto focus. Mainly used for still pictures. Usually abbreviated as AF-S."]
4061    FOCUS_TYPE_AUTO_SINGLE = 5,
4062    #[doc = "Continuous auto focus. Mainly used for dynamic scenes. Abbreviated as AF-C."]
4063    FOCUS_TYPE_AUTO_CONTINUOUS = 6,
4064}
4065impl SetFocusType {
4066    pub const DEFAULT: Self = Self::FOCUS_TYPE_STEP;
4067}
4068impl Default for SetFocusType {
4069    fn default() -> Self {
4070        Self::DEFAULT
4071    }
4072}
4073#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4074#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4075#[cfg_attr(feature = "serde", serde(tag = "type"))]
4076#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4077#[repr(u32)]
4078#[doc = "Speed setpoint types used in MAV_CMD_DO_CHANGE_SPEED"]
4079pub enum SpeedType {
4080    #[doc = "Airspeed"]
4081    SPEED_TYPE_AIRSPEED = 0,
4082    #[doc = "Groundspeed"]
4083    SPEED_TYPE_GROUNDSPEED = 1,
4084    #[doc = "Climb speed"]
4085    SPEED_TYPE_CLIMB_SPEED = 2,
4086    #[doc = "Descent speed"]
4087    SPEED_TYPE_DESCENT_SPEED = 3,
4088}
4089impl SpeedType {
4090    pub const DEFAULT: Self = Self::SPEED_TYPE_AIRSPEED;
4091}
4092impl Default for SpeedType {
4093    fn default() -> Self {
4094        Self::DEFAULT
4095    }
4096}
4097#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4098#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4099#[cfg_attr(feature = "serde", serde(tag = "type"))]
4100#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4101#[repr(u32)]
4102#[doc = "Flags to indicate the status of camera storage."]
4103pub enum StorageStatus {
4104    #[doc = "Storage is missing (no microSD card loaded for example.)"]
4105    STORAGE_STATUS_EMPTY = 0,
4106    #[doc = "Storage present but unformatted."]
4107    STORAGE_STATUS_UNFORMATTED = 1,
4108    #[doc = "Storage present and ready."]
4109    STORAGE_STATUS_READY = 2,
4110    #[doc = "Camera does not supply storage status information. Capacity information in STORAGE_INFORMATION fields will be ignored."]
4111    STORAGE_STATUS_NOT_SUPPORTED = 3,
4112}
4113impl StorageStatus {
4114    pub const DEFAULT: Self = Self::STORAGE_STATUS_EMPTY;
4115}
4116impl Default for StorageStatus {
4117    fn default() -> Self {
4118        Self::DEFAULT
4119    }
4120}
4121#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4122#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4123#[cfg_attr(feature = "serde", serde(tag = "type"))]
4124#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4125#[repr(u32)]
4126#[doc = "Flags to indicate the type of storage."]
4127pub enum StorageType {
4128    #[doc = "Storage type is not known."]
4129    STORAGE_TYPE_UNKNOWN = 0,
4130    #[doc = "Storage type is USB device."]
4131    STORAGE_TYPE_USB_STICK = 1,
4132    #[doc = "Storage type is SD card."]
4133    STORAGE_TYPE_SD = 2,
4134    #[doc = "Storage type is microSD card."]
4135    STORAGE_TYPE_MICROSD = 3,
4136    #[doc = "Storage type is CFast."]
4137    STORAGE_TYPE_CF = 4,
4138    #[doc = "Storage type is CFexpress."]
4139    STORAGE_TYPE_CFE = 5,
4140    #[doc = "Storage type is XQD."]
4141    STORAGE_TYPE_XQD = 6,
4142    #[doc = "Storage type is HD mass storage type."]
4143    STORAGE_TYPE_HD = 7,
4144    #[doc = "Storage type is other, not listed type."]
4145    STORAGE_TYPE_OTHER = 254,
4146}
4147impl StorageType {
4148    pub const DEFAULT: Self = Self::STORAGE_TYPE_UNKNOWN;
4149}
4150impl Default for StorageType {
4151    fn default() -> Self {
4152        Self::DEFAULT
4153    }
4154}
4155bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Flags to indicate usage for a particular storage (see STORAGE_INFORMATION.storage_usage and MAV_CMD_SET_STORAGE_USAGE)."] pub struct StorageUsageFlag : u8 { # [doc = "Always set to 1 (indicates STORAGE_INFORMATION.storage_usage is supported)."] const STORAGE_USAGE_FLAG_SET = 1 ; # [doc = "Storage for saving photos."] const STORAGE_USAGE_FLAG_PHOTO = 2 ; # [doc = "Storage for saving videos."] const STORAGE_USAGE_FLAG_VIDEO = 4 ; # [doc = "Storage for saving logs."] const STORAGE_USAGE_FLAG_LOGS = 8 ; } }
4156impl StorageUsageFlag {
4157    pub const DEFAULT: Self = Self::STORAGE_USAGE_FLAG_SET;
4158}
4159impl Default for StorageUsageFlag {
4160    fn default() -> Self {
4161        Self::DEFAULT
4162    }
4163}
4164#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4165#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4166#[cfg_attr(feature = "serde", serde(tag = "type"))]
4167#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4168#[repr(u32)]
4169#[doc = "Tune formats (used for vehicle buzzer/tone generation)."]
4170pub enum TuneFormat {
4171    #[doc = "Format is QBasic 1.1 Play: <https://www.qbasic.net/en/reference/qb11/Statement/PLAY-006.htm>."]
4172    TUNE_FORMAT_QBASIC1_1 = 1,
4173    #[doc = "Format is Modern Music Markup Language (MML): <https://en.wikipedia.org/wiki/Music_Macro_Language#Modern_MML>."]
4174    TUNE_FORMAT_MML_MODERN = 2,
4175}
4176impl TuneFormat {
4177    pub const DEFAULT: Self = Self::TUNE_FORMAT_QBASIC1_1;
4178}
4179impl Default for TuneFormat {
4180    fn default() -> Self {
4181        Self::DEFAULT
4182    }
4183}
4184#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4185#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4186#[cfg_attr(feature = "serde", serde(tag = "type"))]
4187#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4188#[repr(u32)]
4189#[doc = "Generalized UAVCAN node health"]
4190pub enum UavcanNodeHealth {
4191    #[doc = "The node is functioning properly."]
4192    UAVCAN_NODE_HEALTH_OK = 0,
4193    #[doc = "A critical parameter went out of range or the node has encountered a minor failure."]
4194    UAVCAN_NODE_HEALTH_WARNING = 1,
4195    #[doc = "The node has encountered a major failure."]
4196    UAVCAN_NODE_HEALTH_ERROR = 2,
4197    #[doc = "The node has suffered a fatal malfunction."]
4198    UAVCAN_NODE_HEALTH_CRITICAL = 3,
4199}
4200impl UavcanNodeHealth {
4201    pub const DEFAULT: Self = Self::UAVCAN_NODE_HEALTH_OK;
4202}
4203impl Default for UavcanNodeHealth {
4204    fn default() -> Self {
4205        Self::DEFAULT
4206    }
4207}
4208#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4209#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4210#[cfg_attr(feature = "serde", serde(tag = "type"))]
4211#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4212#[repr(u32)]
4213#[doc = "Generalized UAVCAN node mode"]
4214pub enum UavcanNodeMode {
4215    #[doc = "The node is performing its primary functions."]
4216    UAVCAN_NODE_MODE_OPERATIONAL = 0,
4217    #[doc = "The node is initializing; this mode is entered immediately after startup."]
4218    UAVCAN_NODE_MODE_INITIALIZATION = 1,
4219    #[doc = "The node is under maintenance."]
4220    UAVCAN_NODE_MODE_MAINTENANCE = 2,
4221    #[doc = "The node is in the process of updating its software."]
4222    UAVCAN_NODE_MODE_SOFTWARE_UPDATE = 3,
4223    #[doc = "The node is no longer available online."]
4224    UAVCAN_NODE_MODE_OFFLINE = 7,
4225}
4226impl UavcanNodeMode {
4227    pub const DEFAULT: Self = Self::UAVCAN_NODE_MODE_OPERATIONAL;
4228}
4229impl Default for UavcanNodeMode {
4230    fn default() -> Self {
4231        Self::DEFAULT
4232    }
4233}
4234bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Flags for the global position report."] pub struct UtmDataAvailFlags : u8 { # [doc = "The field time contains valid data."] const UTM_DATA_AVAIL_FLAGS_TIME_VALID = 1 ; # [doc = "The field uas_id contains valid data."] const UTM_DATA_AVAIL_FLAGS_UAS_ID_AVAILABLE = 2 ; # [doc = "The fields lat, lon and h_acc contain valid data."] const UTM_DATA_AVAIL_FLAGS_POSITION_AVAILABLE = 4 ; # [doc = "The fields alt and v_acc contain valid data."] const UTM_DATA_AVAIL_FLAGS_ALTITUDE_AVAILABLE = 8 ; # [doc = "The field relative_alt contains valid data."] const UTM_DATA_AVAIL_FLAGS_RELATIVE_ALTITUDE_AVAILABLE = 16 ; # [doc = "The fields vx and vy contain valid data."] const UTM_DATA_AVAIL_FLAGS_HORIZONTAL_VELO_AVAILABLE = 32 ; # [doc = "The field vz contains valid data."] const UTM_DATA_AVAIL_FLAGS_VERTICAL_VELO_AVAILABLE = 64 ; # [doc = "The fields next_lat, next_lon and next_alt contain valid data."] const UTM_DATA_AVAIL_FLAGS_NEXT_WAYPOINT_AVAILABLE = 128 ; } }
4235impl UtmDataAvailFlags {
4236    pub const DEFAULT: Self = Self::UTM_DATA_AVAIL_FLAGS_TIME_VALID;
4237}
4238impl Default for UtmDataAvailFlags {
4239    fn default() -> Self {
4240        Self::DEFAULT
4241    }
4242}
4243#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4244#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4245#[cfg_attr(feature = "serde", serde(tag = "type"))]
4246#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4247#[repr(u32)]
4248#[doc = "Airborne status of UAS."]
4249pub enum UtmFlightState {
4250    #[doc = "The flight state can't be determined."]
4251    UTM_FLIGHT_STATE_UNKNOWN = 1,
4252    #[doc = "UAS on ground."]
4253    UTM_FLIGHT_STATE_GROUND = 2,
4254    #[doc = "UAS airborne."]
4255    UTM_FLIGHT_STATE_AIRBORNE = 3,
4256    #[doc = "UAS is in an emergency flight state."]
4257    UTM_FLIGHT_STATE_EMERGENCY = 16,
4258    #[doc = "UAS has no active controls."]
4259    UTM_FLIGHT_STATE_NOCTRL = 32,
4260}
4261impl UtmFlightState {
4262    pub const DEFAULT: Self = Self::UTM_FLIGHT_STATE_UNKNOWN;
4263}
4264impl Default for UtmFlightState {
4265    fn default() -> Self {
4266        Self::DEFAULT
4267    }
4268}
4269#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4270#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4271#[cfg_attr(feature = "serde", serde(tag = "type"))]
4272#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4273#[repr(u32)]
4274#[doc = "Video stream encodings"]
4275pub enum VideoStreamEncoding {
4276    #[doc = "Stream encoding is unknown"]
4277    VIDEO_STREAM_ENCODING_UNKNOWN = 0,
4278    #[doc = "Stream encoding is H.264"]
4279    VIDEO_STREAM_ENCODING_H264 = 1,
4280    #[doc = "Stream encoding is H.265"]
4281    VIDEO_STREAM_ENCODING_H265 = 2,
4282}
4283impl VideoStreamEncoding {
4284    pub const DEFAULT: Self = Self::VIDEO_STREAM_ENCODING_UNKNOWN;
4285}
4286impl Default for VideoStreamEncoding {
4287    fn default() -> Self {
4288        Self::DEFAULT
4289    }
4290}
4291bitflags! { # [cfg_attr (feature = "serde" , derive (Serialize , Deserialize))] # [cfg_attr (feature = "arbitrary" , derive (Arbitrary))] # [derive (Debug , Copy , Clone , PartialEq)] # [doc = "Stream status flags (Bitmap)"] pub struct VideoStreamStatusFlags : u16 { # [doc = "Stream is active (running)"] const VIDEO_STREAM_STATUS_FLAGS_RUNNING = 1 ; # [doc = "Stream is thermal imaging"] const VIDEO_STREAM_STATUS_FLAGS_THERMAL = 2 ; # [doc = "Stream can report absolute thermal range (see CAMERA_THERMAL_RANGE)."] const VIDEO_STREAM_STATUS_FLAGS_THERMAL_RANGE_ENABLED = 4 ; } }
4292impl VideoStreamStatusFlags {
4293    pub const DEFAULT: Self = Self::VIDEO_STREAM_STATUS_FLAGS_RUNNING;
4294}
4295impl Default for VideoStreamStatusFlags {
4296    fn default() -> Self {
4297        Self::DEFAULT
4298    }
4299}
4300#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4301#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4302#[cfg_attr(feature = "serde", serde(tag = "type"))]
4303#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4304#[repr(u32)]
4305#[doc = "Video stream types"]
4306pub enum VideoStreamType {
4307    #[doc = "Stream is RTSP"]
4308    VIDEO_STREAM_TYPE_RTSP = 0,
4309    #[doc = "Stream is RTP UDP (URI gives the port number)"]
4310    VIDEO_STREAM_TYPE_RTPUDP = 1,
4311    #[doc = "Stream is MPEG on TCP"]
4312    VIDEO_STREAM_TYPE_TCP_MPEG = 2,
4313    #[doc = "Stream is MPEG TS (URI gives the port number)"]
4314    VIDEO_STREAM_TYPE_MPEG_TS = 3,
4315}
4316impl VideoStreamType {
4317    pub const DEFAULT: Self = Self::VIDEO_STREAM_TYPE_RTSP;
4318}
4319impl Default for VideoStreamType {
4320    fn default() -> Self {
4321        Self::DEFAULT
4322    }
4323}
4324#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4325#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4326#[cfg_attr(feature = "serde", serde(tag = "type"))]
4327#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4328#[repr(u32)]
4329#[doc = "Direction of VTOL transition"]
4330pub enum VtolTransitionHeading {
4331    #[doc = "Respect the heading configuration of the vehicle."]
4332    VTOL_TRANSITION_HEADING_VEHICLE_DEFAULT = 0,
4333    #[doc = "Use the heading pointing towards the next waypoint."]
4334    VTOL_TRANSITION_HEADING_NEXT_WAYPOINT = 1,
4335    #[doc = "Use the heading on takeoff (while sitting on the ground)."]
4336    VTOL_TRANSITION_HEADING_TAKEOFF = 2,
4337    #[doc = "Use the specified heading in parameter 4."]
4338    VTOL_TRANSITION_HEADING_SPECIFIED = 3,
4339    #[doc = "Use the current heading when reaching takeoff altitude (potentially facing the wind when weather-vaning is active)."]
4340    VTOL_TRANSITION_HEADING_ANY = 4,
4341}
4342impl VtolTransitionHeading {
4343    pub const DEFAULT: Self = Self::VTOL_TRANSITION_HEADING_VEHICLE_DEFAULT;
4344}
4345impl Default for VtolTransitionHeading {
4346    fn default() -> Self {
4347        Self::DEFAULT
4348    }
4349}
4350#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4351#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4352#[cfg_attr(feature = "serde", serde(tag = "type"))]
4353#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4354#[repr(u32)]
4355#[doc = "WiFi Mode."]
4356pub enum WifiConfigApMode {
4357    #[doc = "WiFi mode is undefined."]
4358    WIFI_CONFIG_AP_MODE_UNDEFINED = 0,
4359    #[doc = "WiFi configured as an access point."]
4360    WIFI_CONFIG_AP_MODE_AP = 1,
4361    #[doc = "WiFi configured as a station connected to an existing local WiFi network."]
4362    WIFI_CONFIG_AP_MODE_STATION = 2,
4363    #[doc = "WiFi disabled."]
4364    WIFI_CONFIG_AP_MODE_DISABLED = 3,
4365}
4366impl WifiConfigApMode {
4367    pub const DEFAULT: Self = Self::WIFI_CONFIG_AP_MODE_UNDEFINED;
4368}
4369impl Default for WifiConfigApMode {
4370    fn default() -> Self {
4371        Self::DEFAULT
4372    }
4373}
4374#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4375#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4376#[cfg_attr(feature = "serde", serde(tag = "type"))]
4377#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4378#[repr(u32)]
4379#[doc = "Possible responses from a WIFI_CONFIG_AP message."]
4380pub enum WifiConfigApResponse {
4381    #[doc = "Undefined response. Likely an indicative of a system that doesn't support this request."]
4382    WIFI_CONFIG_AP_RESPONSE_UNDEFINED = 0,
4383    #[doc = "Changes accepted."]
4384    WIFI_CONFIG_AP_RESPONSE_ACCEPTED = 1,
4385    #[doc = "Changes rejected."]
4386    WIFI_CONFIG_AP_RESPONSE_REJECTED = 2,
4387    #[doc = "Invalid Mode."]
4388    WIFI_CONFIG_AP_RESPONSE_MODE_ERROR = 3,
4389    #[doc = "Invalid SSID."]
4390    WIFI_CONFIG_AP_RESPONSE_SSID_ERROR = 4,
4391    #[doc = "Invalid Password."]
4392    WIFI_CONFIG_AP_RESPONSE_PASSWORD_ERROR = 5,
4393}
4394impl WifiConfigApResponse {
4395    pub const DEFAULT: Self = Self::WIFI_CONFIG_AP_RESPONSE_UNDEFINED;
4396}
4397impl Default for WifiConfigApResponse {
4398    fn default() -> Self {
4399        Self::DEFAULT
4400    }
4401}
4402#[derive(Debug, Copy, Clone, PartialEq, FromPrimitive, ToPrimitive)]
4403#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4404#[cfg_attr(feature = "serde", serde(tag = "type"))]
4405#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4406#[repr(u32)]
4407#[doc = "Winch actions."]
4408pub enum WinchActions {
4409    #[doc = "Allow motor to freewheel."]
4410    WINCH_RELAXED = 0,
4411    #[doc = "Wind or unwind specified length of line, optionally using specified rate."]
4412    WINCH_RELATIVE_LENGTH_CONTROL = 1,
4413    #[doc = "Wind or unwind line at specified rate."]
4414    WINCH_RATE_CONTROL = 2,
4415    #[doc = "Perform the locking sequence to relieve motor while in the fully retracted position. Only action and instance command parameters are used, others are ignored."]
4416    WINCH_LOCK = 3,
4417    #[doc = "Sequence of drop, slow down, touch down, reel up, lock. Only action and instance command parameters are used, others are ignored."]
4418    WINCH_DELIVER = 4,
4419    #[doc = "Engage motor and hold current position. Only action and instance command parameters are used, others are ignored."]
4420    WINCH_HOLD = 5,
4421    #[doc = "Return the reel to the fully retracted position. Only action and instance command parameters are used, others are ignored."]
4422    WINCH_RETRACT = 6,
4423    #[doc = "Load the reel with line. The winch will calculate the total loaded length and stop when the tension exceeds a threshold. Only action and instance command parameters are used, others are ignored."]
4424    WINCH_LOAD_LINE = 7,
4425    #[doc = "Spool out the entire length of the line. Only action and instance command parameters are used, others are ignored."]
4426    WINCH_ABANDON_LINE = 8,
4427    #[doc = "Spools out just enough to present the hook to the user to load the payload. Only action and instance command parameters are used, others are ignored"]
4428    WINCH_LOAD_PAYLOAD = 9,
4429}
4430impl WinchActions {
4431    pub const DEFAULT: Self = Self::WINCH_RELAXED;
4432}
4433impl Default for WinchActions {
4434    fn default() -> Self {
4435        Self::DEFAULT
4436    }
4437}
4438#[doc = "id: 140"]
4439#[doc = "Set the vehicle attitude and body angular rates."]
4440#[derive(Debug, Clone, PartialEq)]
4441#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4442#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4443pub struct ACTUATOR_CONTROL_TARGET_DATA {
4444    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
4445    pub time_usec: u64,
4446    #[doc = "Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs."]
4447    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
4448    pub controls: [f32; 8],
4449    #[doc = "Actuator group. The \"_mlx\" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances."]
4450    pub group_mlx: u8,
4451}
4452impl ACTUATOR_CONTROL_TARGET_DATA {
4453    pub const ENCODED_LEN: usize = 41usize;
4454    pub const DEFAULT: Self = Self {
4455        time_usec: 0_u64,
4456        controls: [0.0_f32; 8usize],
4457        group_mlx: 0_u8,
4458    };
4459    #[cfg(feature = "arbitrary")]
4460    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
4461        use arbitrary::{Arbitrary, Unstructured};
4462        let mut buf = [0u8; 1024];
4463        rng.fill_bytes(&mut buf);
4464        let mut unstructured = Unstructured::new(&buf);
4465        Self::arbitrary(&mut unstructured).unwrap_or_default()
4466    }
4467}
4468impl Default for ACTUATOR_CONTROL_TARGET_DATA {
4469    fn default() -> Self {
4470        Self::DEFAULT.clone()
4471    }
4472}
4473impl MessageData for ACTUATOR_CONTROL_TARGET_DATA {
4474    type Message = MavMessage;
4475    const ID: u32 = 140u32;
4476    const NAME: &'static str = "ACTUATOR_CONTROL_TARGET";
4477    const EXTRA_CRC: u8 = 181u8;
4478    const ENCODED_LEN: usize = 41usize;
4479    fn deser(
4480        _version: MavlinkVersion,
4481        __input: &[u8],
4482    ) -> Result<Self, ::mavlink_core::error::ParserError> {
4483        let avail_len = __input.len();
4484        let mut payload_buf = [0; Self::ENCODED_LEN];
4485        let mut buf = if avail_len < Self::ENCODED_LEN {
4486            payload_buf[0..avail_len].copy_from_slice(__input);
4487            Bytes::new(&payload_buf)
4488        } else {
4489            Bytes::new(__input)
4490        };
4491        let mut __struct = Self::default();
4492        __struct.time_usec = buf.get_u64_le();
4493        for v in &mut __struct.controls {
4494            let val = buf.get_f32_le();
4495            *v = val;
4496        }
4497        __struct.group_mlx = buf.get_u8();
4498        Ok(__struct)
4499    }
4500    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
4501        let mut __tmp = BytesMut::new(bytes);
4502        #[allow(clippy::absurd_extreme_comparisons)]
4503        #[allow(unused_comparisons)]
4504        if __tmp.remaining() < Self::ENCODED_LEN {
4505            panic!(
4506                "buffer is too small (need {} bytes, but got {})",
4507                Self::ENCODED_LEN,
4508                __tmp.remaining(),
4509            )
4510        }
4511        __tmp.put_u64_le(self.time_usec);
4512        for val in &self.controls {
4513            __tmp.put_f32_le(*val);
4514        }
4515        __tmp.put_u8(self.group_mlx);
4516        if matches!(version, MavlinkVersion::V2) {
4517            let len = __tmp.len();
4518            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
4519        } else {
4520            __tmp.len()
4521        }
4522    }
4523}
4524#[doc = "id: 375"]
4525#[doc = "The raw values of the actuator outputs (e.g. on Pixhawk, from MAIN, AUX ports). This message supersedes SERVO_OUTPUT_RAW."]
4526#[derive(Debug, Clone, PartialEq)]
4527#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4528#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4529pub struct ACTUATOR_OUTPUT_STATUS_DATA {
4530    #[doc = "Timestamp (since system boot)."]
4531    pub time_usec: u64,
4532    #[doc = "Active outputs"]
4533    pub active: u32,
4534    #[doc = "Servo / motor output array values. Zero values indicate unused channels."]
4535    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
4536    pub actuator: [f32; 32],
4537}
4538impl ACTUATOR_OUTPUT_STATUS_DATA {
4539    pub const ENCODED_LEN: usize = 140usize;
4540    pub const DEFAULT: Self = Self {
4541        time_usec: 0_u64,
4542        active: 0_u32,
4543        actuator: [0.0_f32; 32usize],
4544    };
4545    #[cfg(feature = "arbitrary")]
4546    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
4547        use arbitrary::{Arbitrary, Unstructured};
4548        let mut buf = [0u8; 1024];
4549        rng.fill_bytes(&mut buf);
4550        let mut unstructured = Unstructured::new(&buf);
4551        Self::arbitrary(&mut unstructured).unwrap_or_default()
4552    }
4553}
4554impl Default for ACTUATOR_OUTPUT_STATUS_DATA {
4555    fn default() -> Self {
4556        Self::DEFAULT.clone()
4557    }
4558}
4559impl MessageData for ACTUATOR_OUTPUT_STATUS_DATA {
4560    type Message = MavMessage;
4561    const ID: u32 = 375u32;
4562    const NAME: &'static str = "ACTUATOR_OUTPUT_STATUS";
4563    const EXTRA_CRC: u8 = 251u8;
4564    const ENCODED_LEN: usize = 140usize;
4565    fn deser(
4566        _version: MavlinkVersion,
4567        __input: &[u8],
4568    ) -> Result<Self, ::mavlink_core::error::ParserError> {
4569        let avail_len = __input.len();
4570        let mut payload_buf = [0; Self::ENCODED_LEN];
4571        let mut buf = if avail_len < Self::ENCODED_LEN {
4572            payload_buf[0..avail_len].copy_from_slice(__input);
4573            Bytes::new(&payload_buf)
4574        } else {
4575            Bytes::new(__input)
4576        };
4577        let mut __struct = Self::default();
4578        __struct.time_usec = buf.get_u64_le();
4579        __struct.active = buf.get_u32_le();
4580        for v in &mut __struct.actuator {
4581            let val = buf.get_f32_le();
4582            *v = val;
4583        }
4584        Ok(__struct)
4585    }
4586    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
4587        let mut __tmp = BytesMut::new(bytes);
4588        #[allow(clippy::absurd_extreme_comparisons)]
4589        #[allow(unused_comparisons)]
4590        if __tmp.remaining() < Self::ENCODED_LEN {
4591            panic!(
4592                "buffer is too small (need {} bytes, but got {})",
4593                Self::ENCODED_LEN,
4594                __tmp.remaining(),
4595            )
4596        }
4597        __tmp.put_u64_le(self.time_usec);
4598        __tmp.put_u32_le(self.active);
4599        for val in &self.actuator {
4600            __tmp.put_f32_le(*val);
4601        }
4602        if matches!(version, MavlinkVersion::V2) {
4603            let len = __tmp.len();
4604            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
4605        } else {
4606            __tmp.len()
4607        }
4608    }
4609}
4610#[doc = "id: 246"]
4611#[doc = "The location and information of an ADSB vehicle."]
4612#[derive(Debug, Clone, PartialEq)]
4613#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4614#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4615pub struct ADSB_VEHICLE_DATA {
4616    #[doc = "ICAO address"]
4617    pub ICAO_address: u32,
4618    #[doc = "Latitude"]
4619    pub lat: i32,
4620    #[doc = "Longitude"]
4621    pub lon: i32,
4622    #[doc = "Altitude(ASL)"]
4623    pub altitude: i32,
4624    #[doc = "Course over ground"]
4625    pub heading: u16,
4626    #[doc = "The horizontal velocity"]
4627    pub hor_velocity: u16,
4628    #[doc = "The vertical velocity. Positive is up"]
4629    pub ver_velocity: i16,
4630    #[doc = "Bitmap to indicate various statuses including valid data fields"]
4631    pub flags: AdsbFlags,
4632    #[doc = "Squawk code. Note that the code is in decimal: e.g. 7700 (general emergency) is encoded as binary 0b0001_1110_0001_0100, not(!) as 0b0000_111_111_000_000"]
4633    pub squawk: u16,
4634    #[doc = "ADSB altitude type."]
4635    pub altitude_type: AdsbAltitudeType,
4636    #[doc = "The callsign, 8+null"]
4637    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
4638    pub callsign: [u8; 9],
4639    #[doc = "ADSB emitter type."]
4640    pub emitter_type: AdsbEmitterType,
4641    #[doc = "Time since last communication in seconds"]
4642    pub tslc: u8,
4643}
4644impl ADSB_VEHICLE_DATA {
4645    pub const ENCODED_LEN: usize = 38usize;
4646    pub const DEFAULT: Self = Self {
4647        ICAO_address: 0_u32,
4648        lat: 0_i32,
4649        lon: 0_i32,
4650        altitude: 0_i32,
4651        heading: 0_u16,
4652        hor_velocity: 0_u16,
4653        ver_velocity: 0_i16,
4654        flags: AdsbFlags::DEFAULT,
4655        squawk: 0_u16,
4656        altitude_type: AdsbAltitudeType::DEFAULT,
4657        callsign: [0_u8; 9usize],
4658        emitter_type: AdsbEmitterType::DEFAULT,
4659        tslc: 0_u8,
4660    };
4661    #[cfg(feature = "arbitrary")]
4662    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
4663        use arbitrary::{Arbitrary, Unstructured};
4664        let mut buf = [0u8; 1024];
4665        rng.fill_bytes(&mut buf);
4666        let mut unstructured = Unstructured::new(&buf);
4667        Self::arbitrary(&mut unstructured).unwrap_or_default()
4668    }
4669}
4670impl Default for ADSB_VEHICLE_DATA {
4671    fn default() -> Self {
4672        Self::DEFAULT.clone()
4673    }
4674}
4675impl MessageData for ADSB_VEHICLE_DATA {
4676    type Message = MavMessage;
4677    const ID: u32 = 246u32;
4678    const NAME: &'static str = "ADSB_VEHICLE";
4679    const EXTRA_CRC: u8 = 184u8;
4680    const ENCODED_LEN: usize = 38usize;
4681    fn deser(
4682        _version: MavlinkVersion,
4683        __input: &[u8],
4684    ) -> Result<Self, ::mavlink_core::error::ParserError> {
4685        let avail_len = __input.len();
4686        let mut payload_buf = [0; Self::ENCODED_LEN];
4687        let mut buf = if avail_len < Self::ENCODED_LEN {
4688            payload_buf[0..avail_len].copy_from_slice(__input);
4689            Bytes::new(&payload_buf)
4690        } else {
4691            Bytes::new(__input)
4692        };
4693        let mut __struct = Self::default();
4694        __struct.ICAO_address = buf.get_u32_le();
4695        __struct.lat = buf.get_i32_le();
4696        __struct.lon = buf.get_i32_le();
4697        __struct.altitude = buf.get_i32_le();
4698        __struct.heading = buf.get_u16_le();
4699        __struct.hor_velocity = buf.get_u16_le();
4700        __struct.ver_velocity = buf.get_i16_le();
4701        let tmp = buf.get_u16_le();
4702        __struct.flags = AdsbFlags::from_bits(tmp & AdsbFlags::all().bits()).ok_or(
4703            ::mavlink_core::error::ParserError::InvalidFlag {
4704                flag_type: "AdsbFlags",
4705                value: tmp as u32,
4706            },
4707        )?;
4708        __struct.squawk = buf.get_u16_le();
4709        let tmp = buf.get_u8();
4710        __struct.altitude_type =
4711            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
4712                enum_type: "AdsbAltitudeType",
4713                value: tmp as u32,
4714            })?;
4715        for v in &mut __struct.callsign {
4716            let val = buf.get_u8();
4717            *v = val;
4718        }
4719        let tmp = buf.get_u8();
4720        __struct.emitter_type =
4721            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
4722                enum_type: "AdsbEmitterType",
4723                value: tmp as u32,
4724            })?;
4725        __struct.tslc = buf.get_u8();
4726        Ok(__struct)
4727    }
4728    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
4729        let mut __tmp = BytesMut::new(bytes);
4730        #[allow(clippy::absurd_extreme_comparisons)]
4731        #[allow(unused_comparisons)]
4732        if __tmp.remaining() < Self::ENCODED_LEN {
4733            panic!(
4734                "buffer is too small (need {} bytes, but got {})",
4735                Self::ENCODED_LEN,
4736                __tmp.remaining(),
4737            )
4738        }
4739        __tmp.put_u32_le(self.ICAO_address);
4740        __tmp.put_i32_le(self.lat);
4741        __tmp.put_i32_le(self.lon);
4742        __tmp.put_i32_le(self.altitude);
4743        __tmp.put_u16_le(self.heading);
4744        __tmp.put_u16_le(self.hor_velocity);
4745        __tmp.put_i16_le(self.ver_velocity);
4746        __tmp.put_u16_le(self.flags.bits());
4747        __tmp.put_u16_le(self.squawk);
4748        __tmp.put_u8(self.altitude_type as u8);
4749        for val in &self.callsign {
4750            __tmp.put_u8(*val);
4751        }
4752        __tmp.put_u8(self.emitter_type as u8);
4753        __tmp.put_u8(self.tslc);
4754        if matches!(version, MavlinkVersion::V2) {
4755            let len = __tmp.len();
4756            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
4757        } else {
4758            __tmp.len()
4759        }
4760    }
4761}
4762#[doc = "id: 301"]
4763#[doc = "The location and information of an AIS vessel."]
4764#[derive(Debug, Clone, PartialEq)]
4765#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4766#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4767pub struct AIS_VESSEL_DATA {
4768    #[doc = "Mobile Marine Service Identifier, 9 decimal digits"]
4769    pub MMSI: u32,
4770    #[doc = "Latitude"]
4771    pub lat: i32,
4772    #[doc = "Longitude"]
4773    pub lon: i32,
4774    #[doc = "Course over ground"]
4775    pub COG: u16,
4776    #[doc = "True heading"]
4777    pub heading: u16,
4778    #[doc = "Speed over ground"]
4779    pub velocity: u16,
4780    #[doc = "Distance from lat/lon location to bow"]
4781    pub dimension_bow: u16,
4782    #[doc = "Distance from lat/lon location to stern"]
4783    pub dimension_stern: u16,
4784    #[doc = "Time since last communication in seconds"]
4785    pub tslc: u16,
4786    #[doc = "Bitmask to indicate various statuses including valid data fields"]
4787    pub flags: AisFlags,
4788    #[doc = "Turn rate"]
4789    pub turn_rate: i8,
4790    #[doc = "Navigational status"]
4791    pub navigational_status: AisNavStatus,
4792    #[doc = "Type of vessels"]
4793    pub mavtype: AisType,
4794    #[doc = "Distance from lat/lon location to port side"]
4795    pub dimension_port: u8,
4796    #[doc = "Distance from lat/lon location to starboard side"]
4797    pub dimension_starboard: u8,
4798    #[doc = "The vessel callsign"]
4799    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
4800    pub callsign: [u8; 7],
4801    #[doc = "The vessel name"]
4802    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
4803    pub name: [u8; 20],
4804}
4805impl AIS_VESSEL_DATA {
4806    pub const ENCODED_LEN: usize = 58usize;
4807    pub const DEFAULT: Self = Self {
4808        MMSI: 0_u32,
4809        lat: 0_i32,
4810        lon: 0_i32,
4811        COG: 0_u16,
4812        heading: 0_u16,
4813        velocity: 0_u16,
4814        dimension_bow: 0_u16,
4815        dimension_stern: 0_u16,
4816        tslc: 0_u16,
4817        flags: AisFlags::DEFAULT,
4818        turn_rate: 0_i8,
4819        navigational_status: AisNavStatus::DEFAULT,
4820        mavtype: AisType::DEFAULT,
4821        dimension_port: 0_u8,
4822        dimension_starboard: 0_u8,
4823        callsign: [0_u8; 7usize],
4824        name: [0_u8; 20usize],
4825    };
4826    #[cfg(feature = "arbitrary")]
4827    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
4828        use arbitrary::{Arbitrary, Unstructured};
4829        let mut buf = [0u8; 1024];
4830        rng.fill_bytes(&mut buf);
4831        let mut unstructured = Unstructured::new(&buf);
4832        Self::arbitrary(&mut unstructured).unwrap_or_default()
4833    }
4834}
4835impl Default for AIS_VESSEL_DATA {
4836    fn default() -> Self {
4837        Self::DEFAULT.clone()
4838    }
4839}
4840impl MessageData for AIS_VESSEL_DATA {
4841    type Message = MavMessage;
4842    const ID: u32 = 301u32;
4843    const NAME: &'static str = "AIS_VESSEL";
4844    const EXTRA_CRC: u8 = 243u8;
4845    const ENCODED_LEN: usize = 58usize;
4846    fn deser(
4847        _version: MavlinkVersion,
4848        __input: &[u8],
4849    ) -> Result<Self, ::mavlink_core::error::ParserError> {
4850        let avail_len = __input.len();
4851        let mut payload_buf = [0; Self::ENCODED_LEN];
4852        let mut buf = if avail_len < Self::ENCODED_LEN {
4853            payload_buf[0..avail_len].copy_from_slice(__input);
4854            Bytes::new(&payload_buf)
4855        } else {
4856            Bytes::new(__input)
4857        };
4858        let mut __struct = Self::default();
4859        __struct.MMSI = buf.get_u32_le();
4860        __struct.lat = buf.get_i32_le();
4861        __struct.lon = buf.get_i32_le();
4862        __struct.COG = buf.get_u16_le();
4863        __struct.heading = buf.get_u16_le();
4864        __struct.velocity = buf.get_u16_le();
4865        __struct.dimension_bow = buf.get_u16_le();
4866        __struct.dimension_stern = buf.get_u16_le();
4867        __struct.tslc = buf.get_u16_le();
4868        let tmp = buf.get_u16_le();
4869        __struct.flags = AisFlags::from_bits(tmp & AisFlags::all().bits()).ok_or(
4870            ::mavlink_core::error::ParserError::InvalidFlag {
4871                flag_type: "AisFlags",
4872                value: tmp as u32,
4873            },
4874        )?;
4875        __struct.turn_rate = buf.get_i8();
4876        let tmp = buf.get_u8();
4877        __struct.navigational_status =
4878            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
4879                enum_type: "AisNavStatus",
4880                value: tmp as u32,
4881            })?;
4882        let tmp = buf.get_u8();
4883        __struct.mavtype =
4884            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
4885                enum_type: "AisType",
4886                value: tmp as u32,
4887            })?;
4888        __struct.dimension_port = buf.get_u8();
4889        __struct.dimension_starboard = buf.get_u8();
4890        for v in &mut __struct.callsign {
4891            let val = buf.get_u8();
4892            *v = val;
4893        }
4894        for v in &mut __struct.name {
4895            let val = buf.get_u8();
4896            *v = val;
4897        }
4898        Ok(__struct)
4899    }
4900    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
4901        let mut __tmp = BytesMut::new(bytes);
4902        #[allow(clippy::absurd_extreme_comparisons)]
4903        #[allow(unused_comparisons)]
4904        if __tmp.remaining() < Self::ENCODED_LEN {
4905            panic!(
4906                "buffer is too small (need {} bytes, but got {})",
4907                Self::ENCODED_LEN,
4908                __tmp.remaining(),
4909            )
4910        }
4911        __tmp.put_u32_le(self.MMSI);
4912        __tmp.put_i32_le(self.lat);
4913        __tmp.put_i32_le(self.lon);
4914        __tmp.put_u16_le(self.COG);
4915        __tmp.put_u16_le(self.heading);
4916        __tmp.put_u16_le(self.velocity);
4917        __tmp.put_u16_le(self.dimension_bow);
4918        __tmp.put_u16_le(self.dimension_stern);
4919        __tmp.put_u16_le(self.tslc);
4920        __tmp.put_u16_le(self.flags.bits());
4921        __tmp.put_i8(self.turn_rate);
4922        __tmp.put_u8(self.navigational_status as u8);
4923        __tmp.put_u8(self.mavtype as u8);
4924        __tmp.put_u8(self.dimension_port);
4925        __tmp.put_u8(self.dimension_starboard);
4926        for val in &self.callsign {
4927            __tmp.put_u8(*val);
4928        }
4929        for val in &self.name {
4930            __tmp.put_u8(*val);
4931        }
4932        if matches!(version, MavlinkVersion::V2) {
4933            let len = __tmp.len();
4934            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
4935        } else {
4936            __tmp.len()
4937        }
4938    }
4939}
4940#[doc = "id: 141"]
4941#[doc = "The current system altitude."]
4942#[derive(Debug, Clone, PartialEq)]
4943#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
4944#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4945pub struct ALTITUDE_DATA {
4946    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
4947    pub time_usec: u64,
4948    #[doc = "This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights."]
4949    pub altitude_monotonic: f32,
4950    #[doc = "This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output MSL by default and not the WGS84 altitude."]
4951    pub altitude_amsl: f32,
4952    #[doc = "This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive."]
4953    pub altitude_local: f32,
4954    #[doc = "This is the altitude above the home position. It resets on each change of the current home position."]
4955    pub altitude_relative: f32,
4956    #[doc = "This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown."]
4957    pub altitude_terrain: f32,
4958    #[doc = "This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available."]
4959    pub bottom_clearance: f32,
4960}
4961impl ALTITUDE_DATA {
4962    pub const ENCODED_LEN: usize = 32usize;
4963    pub const DEFAULT: Self = Self {
4964        time_usec: 0_u64,
4965        altitude_monotonic: 0.0_f32,
4966        altitude_amsl: 0.0_f32,
4967        altitude_local: 0.0_f32,
4968        altitude_relative: 0.0_f32,
4969        altitude_terrain: 0.0_f32,
4970        bottom_clearance: 0.0_f32,
4971    };
4972    #[cfg(feature = "arbitrary")]
4973    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
4974        use arbitrary::{Arbitrary, Unstructured};
4975        let mut buf = [0u8; 1024];
4976        rng.fill_bytes(&mut buf);
4977        let mut unstructured = Unstructured::new(&buf);
4978        Self::arbitrary(&mut unstructured).unwrap_or_default()
4979    }
4980}
4981impl Default for ALTITUDE_DATA {
4982    fn default() -> Self {
4983        Self::DEFAULT.clone()
4984    }
4985}
4986impl MessageData for ALTITUDE_DATA {
4987    type Message = MavMessage;
4988    const ID: u32 = 141u32;
4989    const NAME: &'static str = "ALTITUDE";
4990    const EXTRA_CRC: u8 = 47u8;
4991    const ENCODED_LEN: usize = 32usize;
4992    fn deser(
4993        _version: MavlinkVersion,
4994        __input: &[u8],
4995    ) -> Result<Self, ::mavlink_core::error::ParserError> {
4996        let avail_len = __input.len();
4997        let mut payload_buf = [0; Self::ENCODED_LEN];
4998        let mut buf = if avail_len < Self::ENCODED_LEN {
4999            payload_buf[0..avail_len].copy_from_slice(__input);
5000            Bytes::new(&payload_buf)
5001        } else {
5002            Bytes::new(__input)
5003        };
5004        let mut __struct = Self::default();
5005        __struct.time_usec = buf.get_u64_le();
5006        __struct.altitude_monotonic = buf.get_f32_le();
5007        __struct.altitude_amsl = buf.get_f32_le();
5008        __struct.altitude_local = buf.get_f32_le();
5009        __struct.altitude_relative = buf.get_f32_le();
5010        __struct.altitude_terrain = buf.get_f32_le();
5011        __struct.bottom_clearance = buf.get_f32_le();
5012        Ok(__struct)
5013    }
5014    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
5015        let mut __tmp = BytesMut::new(bytes);
5016        #[allow(clippy::absurd_extreme_comparisons)]
5017        #[allow(unused_comparisons)]
5018        if __tmp.remaining() < Self::ENCODED_LEN {
5019            panic!(
5020                "buffer is too small (need {} bytes, but got {})",
5021                Self::ENCODED_LEN,
5022                __tmp.remaining(),
5023            )
5024        }
5025        __tmp.put_u64_le(self.time_usec);
5026        __tmp.put_f32_le(self.altitude_monotonic);
5027        __tmp.put_f32_le(self.altitude_amsl);
5028        __tmp.put_f32_le(self.altitude_local);
5029        __tmp.put_f32_le(self.altitude_relative);
5030        __tmp.put_f32_le(self.altitude_terrain);
5031        __tmp.put_f32_le(self.bottom_clearance);
5032        if matches!(version, MavlinkVersion::V2) {
5033            let len = __tmp.len();
5034            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
5035        } else {
5036            __tmp.len()
5037        }
5038    }
5039}
5040#[doc = "id: 30"]
5041#[doc = "The attitude in the aeronautical frame (right-handed, Z-down, Y-right, X-front, ZYX, intrinsic)."]
5042#[derive(Debug, Clone, PartialEq)]
5043#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5044#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5045pub struct ATTITUDE_DATA {
5046    #[doc = "Timestamp (time since system boot)."]
5047    pub time_boot_ms: u32,
5048    #[doc = "Roll angle (-pi..+pi)"]
5049    pub roll: f32,
5050    #[doc = "Pitch angle (-pi..+pi)"]
5051    pub pitch: f32,
5052    #[doc = "Yaw angle (-pi..+pi)"]
5053    pub yaw: f32,
5054    #[doc = "Roll angular speed"]
5055    pub rollspeed: f32,
5056    #[doc = "Pitch angular speed"]
5057    pub pitchspeed: f32,
5058    #[doc = "Yaw angular speed"]
5059    pub yawspeed: f32,
5060}
5061impl ATTITUDE_DATA {
5062    pub const ENCODED_LEN: usize = 28usize;
5063    pub const DEFAULT: Self = Self {
5064        time_boot_ms: 0_u32,
5065        roll: 0.0_f32,
5066        pitch: 0.0_f32,
5067        yaw: 0.0_f32,
5068        rollspeed: 0.0_f32,
5069        pitchspeed: 0.0_f32,
5070        yawspeed: 0.0_f32,
5071    };
5072    #[cfg(feature = "arbitrary")]
5073    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
5074        use arbitrary::{Arbitrary, Unstructured};
5075        let mut buf = [0u8; 1024];
5076        rng.fill_bytes(&mut buf);
5077        let mut unstructured = Unstructured::new(&buf);
5078        Self::arbitrary(&mut unstructured).unwrap_or_default()
5079    }
5080}
5081impl Default for ATTITUDE_DATA {
5082    fn default() -> Self {
5083        Self::DEFAULT.clone()
5084    }
5085}
5086impl MessageData for ATTITUDE_DATA {
5087    type Message = MavMessage;
5088    const ID: u32 = 30u32;
5089    const NAME: &'static str = "ATTITUDE";
5090    const EXTRA_CRC: u8 = 39u8;
5091    const ENCODED_LEN: usize = 28usize;
5092    fn deser(
5093        _version: MavlinkVersion,
5094        __input: &[u8],
5095    ) -> Result<Self, ::mavlink_core::error::ParserError> {
5096        let avail_len = __input.len();
5097        let mut payload_buf = [0; Self::ENCODED_LEN];
5098        let mut buf = if avail_len < Self::ENCODED_LEN {
5099            payload_buf[0..avail_len].copy_from_slice(__input);
5100            Bytes::new(&payload_buf)
5101        } else {
5102            Bytes::new(__input)
5103        };
5104        let mut __struct = Self::default();
5105        __struct.time_boot_ms = buf.get_u32_le();
5106        __struct.roll = buf.get_f32_le();
5107        __struct.pitch = buf.get_f32_le();
5108        __struct.yaw = buf.get_f32_le();
5109        __struct.rollspeed = buf.get_f32_le();
5110        __struct.pitchspeed = buf.get_f32_le();
5111        __struct.yawspeed = buf.get_f32_le();
5112        Ok(__struct)
5113    }
5114    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
5115        let mut __tmp = BytesMut::new(bytes);
5116        #[allow(clippy::absurd_extreme_comparisons)]
5117        #[allow(unused_comparisons)]
5118        if __tmp.remaining() < Self::ENCODED_LEN {
5119            panic!(
5120                "buffer is too small (need {} bytes, but got {})",
5121                Self::ENCODED_LEN,
5122                __tmp.remaining(),
5123            )
5124        }
5125        __tmp.put_u32_le(self.time_boot_ms);
5126        __tmp.put_f32_le(self.roll);
5127        __tmp.put_f32_le(self.pitch);
5128        __tmp.put_f32_le(self.yaw);
5129        __tmp.put_f32_le(self.rollspeed);
5130        __tmp.put_f32_le(self.pitchspeed);
5131        __tmp.put_f32_le(self.yawspeed);
5132        if matches!(version, MavlinkVersion::V2) {
5133            let len = __tmp.len();
5134            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
5135        } else {
5136            __tmp.len()
5137        }
5138    }
5139}
5140#[doc = "id: 31"]
5141#[doc = "The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right), expressed as quaternion. Quaternion order is w, x, y, z and a zero rotation would be expressed as (1 0 0 0)."]
5142#[derive(Debug, Clone, PartialEq)]
5143#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5144#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5145pub struct ATTITUDE_QUATERNION_DATA {
5146    #[doc = "Timestamp (time since system boot)."]
5147    pub time_boot_ms: u32,
5148    #[doc = "Quaternion component 1, w (1 in null-rotation)"]
5149    pub q1: f32,
5150    #[doc = "Quaternion component 2, x (0 in null-rotation)"]
5151    pub q2: f32,
5152    #[doc = "Quaternion component 3, y (0 in null-rotation)"]
5153    pub q3: f32,
5154    #[doc = "Quaternion component 4, z (0 in null-rotation)"]
5155    pub q4: f32,
5156    #[doc = "Roll angular speed"]
5157    pub rollspeed: f32,
5158    #[doc = "Pitch angular speed"]
5159    pub pitchspeed: f32,
5160    #[doc = "Yaw angular speed"]
5161    pub yawspeed: f32,
5162    #[doc = "Rotation offset by which the attitude quaternion and angular speed vector should be rotated for user display (quaternion with [w, x, y, z] order, zero-rotation is [1, 0, 0, 0], send [0, 0, 0, 0] if field not supported). This field is intended for systems in which the reference attitude may change during flight. For example, tailsitters VTOLs rotate their reference attitude by 90 degrees between hover mode and fixed wing mode, thus repr_offset_q is equal to [1, 0, 0, 0] in hover mode and equal to [0.7071, 0, 0.7071, 0] in fixed wing mode."]
5163    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
5164    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5165    pub repr_offset_q: [f32; 4],
5166}
5167impl ATTITUDE_QUATERNION_DATA {
5168    pub const ENCODED_LEN: usize = 48usize;
5169    pub const DEFAULT: Self = Self {
5170        time_boot_ms: 0_u32,
5171        q1: 0.0_f32,
5172        q2: 0.0_f32,
5173        q3: 0.0_f32,
5174        q4: 0.0_f32,
5175        rollspeed: 0.0_f32,
5176        pitchspeed: 0.0_f32,
5177        yawspeed: 0.0_f32,
5178        repr_offset_q: [0.0_f32; 4usize],
5179    };
5180    #[cfg(feature = "arbitrary")]
5181    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
5182        use arbitrary::{Arbitrary, Unstructured};
5183        let mut buf = [0u8; 1024];
5184        rng.fill_bytes(&mut buf);
5185        let mut unstructured = Unstructured::new(&buf);
5186        Self::arbitrary(&mut unstructured).unwrap_or_default()
5187    }
5188}
5189impl Default for ATTITUDE_QUATERNION_DATA {
5190    fn default() -> Self {
5191        Self::DEFAULT.clone()
5192    }
5193}
5194impl MessageData for ATTITUDE_QUATERNION_DATA {
5195    type Message = MavMessage;
5196    const ID: u32 = 31u32;
5197    const NAME: &'static str = "ATTITUDE_QUATERNION";
5198    const EXTRA_CRC: u8 = 246u8;
5199    const ENCODED_LEN: usize = 48usize;
5200    fn deser(
5201        _version: MavlinkVersion,
5202        __input: &[u8],
5203    ) -> Result<Self, ::mavlink_core::error::ParserError> {
5204        let avail_len = __input.len();
5205        let mut payload_buf = [0; Self::ENCODED_LEN];
5206        let mut buf = if avail_len < Self::ENCODED_LEN {
5207            payload_buf[0..avail_len].copy_from_slice(__input);
5208            Bytes::new(&payload_buf)
5209        } else {
5210            Bytes::new(__input)
5211        };
5212        let mut __struct = Self::default();
5213        __struct.time_boot_ms = buf.get_u32_le();
5214        __struct.q1 = buf.get_f32_le();
5215        __struct.q2 = buf.get_f32_le();
5216        __struct.q3 = buf.get_f32_le();
5217        __struct.q4 = buf.get_f32_le();
5218        __struct.rollspeed = buf.get_f32_le();
5219        __struct.pitchspeed = buf.get_f32_le();
5220        __struct.yawspeed = buf.get_f32_le();
5221        for v in &mut __struct.repr_offset_q {
5222            let val = buf.get_f32_le();
5223            *v = val;
5224        }
5225        Ok(__struct)
5226    }
5227    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
5228        let mut __tmp = BytesMut::new(bytes);
5229        #[allow(clippy::absurd_extreme_comparisons)]
5230        #[allow(unused_comparisons)]
5231        if __tmp.remaining() < Self::ENCODED_LEN {
5232            panic!(
5233                "buffer is too small (need {} bytes, but got {})",
5234                Self::ENCODED_LEN,
5235                __tmp.remaining(),
5236            )
5237        }
5238        __tmp.put_u32_le(self.time_boot_ms);
5239        __tmp.put_f32_le(self.q1);
5240        __tmp.put_f32_le(self.q2);
5241        __tmp.put_f32_le(self.q3);
5242        __tmp.put_f32_le(self.q4);
5243        __tmp.put_f32_le(self.rollspeed);
5244        __tmp.put_f32_le(self.pitchspeed);
5245        __tmp.put_f32_le(self.yawspeed);
5246        for val in &self.repr_offset_q {
5247            __tmp.put_f32_le(*val);
5248        }
5249        if matches!(version, MavlinkVersion::V2) {
5250            let len = __tmp.len();
5251            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
5252        } else {
5253            __tmp.len()
5254        }
5255    }
5256}
5257#[doc = "id: 61"]
5258#[doc = "The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right), expressed as quaternion. Quaternion order is w, x, y, z and a zero rotation would be expressed as (1 0 0 0)."]
5259#[derive(Debug, Clone, PartialEq)]
5260#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5261#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5262pub struct ATTITUDE_QUATERNION_COV_DATA {
5263    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
5264    pub time_usec: u64,
5265    #[doc = "Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation)"]
5266    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5267    pub q: [f32; 4],
5268    #[doc = "Roll angular speed"]
5269    pub rollspeed: f32,
5270    #[doc = "Pitch angular speed"]
5271    pub pitchspeed: f32,
5272    #[doc = "Yaw angular speed"]
5273    pub yawspeed: f32,
5274    #[doc = "Row-major representation of a 3x3 attitude covariance matrix (states: roll, pitch, yaw; first three entries are the first ROW, next three entries are the second row, etc.). If unknown, assign NaN value to first element in the array."]
5275    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5276    pub covariance: [f32; 9],
5277}
5278impl ATTITUDE_QUATERNION_COV_DATA {
5279    pub const ENCODED_LEN: usize = 72usize;
5280    pub const DEFAULT: Self = Self {
5281        time_usec: 0_u64,
5282        q: [0.0_f32; 4usize],
5283        rollspeed: 0.0_f32,
5284        pitchspeed: 0.0_f32,
5285        yawspeed: 0.0_f32,
5286        covariance: [0.0_f32; 9usize],
5287    };
5288    #[cfg(feature = "arbitrary")]
5289    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
5290        use arbitrary::{Arbitrary, Unstructured};
5291        let mut buf = [0u8; 1024];
5292        rng.fill_bytes(&mut buf);
5293        let mut unstructured = Unstructured::new(&buf);
5294        Self::arbitrary(&mut unstructured).unwrap_or_default()
5295    }
5296}
5297impl Default for ATTITUDE_QUATERNION_COV_DATA {
5298    fn default() -> Self {
5299        Self::DEFAULT.clone()
5300    }
5301}
5302impl MessageData for ATTITUDE_QUATERNION_COV_DATA {
5303    type Message = MavMessage;
5304    const ID: u32 = 61u32;
5305    const NAME: &'static str = "ATTITUDE_QUATERNION_COV";
5306    const EXTRA_CRC: u8 = 167u8;
5307    const ENCODED_LEN: usize = 72usize;
5308    fn deser(
5309        _version: MavlinkVersion,
5310        __input: &[u8],
5311    ) -> Result<Self, ::mavlink_core::error::ParserError> {
5312        let avail_len = __input.len();
5313        let mut payload_buf = [0; Self::ENCODED_LEN];
5314        let mut buf = if avail_len < Self::ENCODED_LEN {
5315            payload_buf[0..avail_len].copy_from_slice(__input);
5316            Bytes::new(&payload_buf)
5317        } else {
5318            Bytes::new(__input)
5319        };
5320        let mut __struct = Self::default();
5321        __struct.time_usec = buf.get_u64_le();
5322        for v in &mut __struct.q {
5323            let val = buf.get_f32_le();
5324            *v = val;
5325        }
5326        __struct.rollspeed = buf.get_f32_le();
5327        __struct.pitchspeed = buf.get_f32_le();
5328        __struct.yawspeed = buf.get_f32_le();
5329        for v in &mut __struct.covariance {
5330            let val = buf.get_f32_le();
5331            *v = val;
5332        }
5333        Ok(__struct)
5334    }
5335    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
5336        let mut __tmp = BytesMut::new(bytes);
5337        #[allow(clippy::absurd_extreme_comparisons)]
5338        #[allow(unused_comparisons)]
5339        if __tmp.remaining() < Self::ENCODED_LEN {
5340            panic!(
5341                "buffer is too small (need {} bytes, but got {})",
5342                Self::ENCODED_LEN,
5343                __tmp.remaining(),
5344            )
5345        }
5346        __tmp.put_u64_le(self.time_usec);
5347        for val in &self.q {
5348            __tmp.put_f32_le(*val);
5349        }
5350        __tmp.put_f32_le(self.rollspeed);
5351        __tmp.put_f32_le(self.pitchspeed);
5352        __tmp.put_f32_le(self.yawspeed);
5353        for val in &self.covariance {
5354            __tmp.put_f32_le(*val);
5355        }
5356        if matches!(version, MavlinkVersion::V2) {
5357            let len = __tmp.len();
5358            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
5359        } else {
5360            __tmp.len()
5361        }
5362    }
5363}
5364#[doc = "id: 83"]
5365#[doc = "Reports the current commanded attitude of the vehicle as specified by the autopilot. This should match the commands sent in a SET_ATTITUDE_TARGET message if the vehicle is being controlled this way."]
5366#[derive(Debug, Clone, PartialEq)]
5367#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5368#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5369pub struct ATTITUDE_TARGET_DATA {
5370    #[doc = "Timestamp (time since system boot)."]
5371    pub time_boot_ms: u32,
5372    #[doc = "Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)"]
5373    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5374    pub q: [f32; 4],
5375    #[doc = "Body roll rate"]
5376    pub body_roll_rate: f32,
5377    #[doc = "Body pitch rate"]
5378    pub body_pitch_rate: f32,
5379    #[doc = "Body yaw rate"]
5380    pub body_yaw_rate: f32,
5381    #[doc = "Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust)"]
5382    pub thrust: f32,
5383    #[doc = "Bitmap to indicate which dimensions should be ignored by the vehicle."]
5384    pub type_mask: AttitudeTargetTypemask,
5385}
5386impl ATTITUDE_TARGET_DATA {
5387    pub const ENCODED_LEN: usize = 37usize;
5388    pub const DEFAULT: Self = Self {
5389        time_boot_ms: 0_u32,
5390        q: [0.0_f32; 4usize],
5391        body_roll_rate: 0.0_f32,
5392        body_pitch_rate: 0.0_f32,
5393        body_yaw_rate: 0.0_f32,
5394        thrust: 0.0_f32,
5395        type_mask: AttitudeTargetTypemask::DEFAULT,
5396    };
5397    #[cfg(feature = "arbitrary")]
5398    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
5399        use arbitrary::{Arbitrary, Unstructured};
5400        let mut buf = [0u8; 1024];
5401        rng.fill_bytes(&mut buf);
5402        let mut unstructured = Unstructured::new(&buf);
5403        Self::arbitrary(&mut unstructured).unwrap_or_default()
5404    }
5405}
5406impl Default for ATTITUDE_TARGET_DATA {
5407    fn default() -> Self {
5408        Self::DEFAULT.clone()
5409    }
5410}
5411impl MessageData for ATTITUDE_TARGET_DATA {
5412    type Message = MavMessage;
5413    const ID: u32 = 83u32;
5414    const NAME: &'static str = "ATTITUDE_TARGET";
5415    const EXTRA_CRC: u8 = 22u8;
5416    const ENCODED_LEN: usize = 37usize;
5417    fn deser(
5418        _version: MavlinkVersion,
5419        __input: &[u8],
5420    ) -> Result<Self, ::mavlink_core::error::ParserError> {
5421        let avail_len = __input.len();
5422        let mut payload_buf = [0; Self::ENCODED_LEN];
5423        let mut buf = if avail_len < Self::ENCODED_LEN {
5424            payload_buf[0..avail_len].copy_from_slice(__input);
5425            Bytes::new(&payload_buf)
5426        } else {
5427            Bytes::new(__input)
5428        };
5429        let mut __struct = Self::default();
5430        __struct.time_boot_ms = buf.get_u32_le();
5431        for v in &mut __struct.q {
5432            let val = buf.get_f32_le();
5433            *v = val;
5434        }
5435        __struct.body_roll_rate = buf.get_f32_le();
5436        __struct.body_pitch_rate = buf.get_f32_le();
5437        __struct.body_yaw_rate = buf.get_f32_le();
5438        __struct.thrust = buf.get_f32_le();
5439        let tmp = buf.get_u8();
5440        __struct.type_mask = AttitudeTargetTypemask::from_bits(
5441            tmp & AttitudeTargetTypemask::all().bits(),
5442        )
5443        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
5444            flag_type: "AttitudeTargetTypemask",
5445            value: tmp as u32,
5446        })?;
5447        Ok(__struct)
5448    }
5449    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
5450        let mut __tmp = BytesMut::new(bytes);
5451        #[allow(clippy::absurd_extreme_comparisons)]
5452        #[allow(unused_comparisons)]
5453        if __tmp.remaining() < Self::ENCODED_LEN {
5454            panic!(
5455                "buffer is too small (need {} bytes, but got {})",
5456                Self::ENCODED_LEN,
5457                __tmp.remaining(),
5458            )
5459        }
5460        __tmp.put_u32_le(self.time_boot_ms);
5461        for val in &self.q {
5462            __tmp.put_f32_le(*val);
5463        }
5464        __tmp.put_f32_le(self.body_roll_rate);
5465        __tmp.put_f32_le(self.body_pitch_rate);
5466        __tmp.put_f32_le(self.body_yaw_rate);
5467        __tmp.put_f32_le(self.thrust);
5468        __tmp.put_u8(self.type_mask.bits());
5469        if matches!(version, MavlinkVersion::V2) {
5470            let len = __tmp.len();
5471            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
5472        } else {
5473            __tmp.len()
5474        }
5475    }
5476}
5477#[doc = "id: 138"]
5478#[doc = "Motion capture attitude and position."]
5479#[derive(Debug, Clone, PartialEq)]
5480#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5481#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5482pub struct ATT_POS_MOCAP_DATA {
5483    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
5484    pub time_usec: u64,
5485    #[doc = "Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)"]
5486    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5487    pub q: [f32; 4],
5488    #[doc = "X position (NED)"]
5489    pub x: f32,
5490    #[doc = "Y position (NED)"]
5491    pub y: f32,
5492    #[doc = "Z position (NED)"]
5493    pub z: f32,
5494    #[doc = "Row-major representation of a pose 6x6 cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array."]
5495    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
5496    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5497    pub covariance: [f32; 21],
5498}
5499impl ATT_POS_MOCAP_DATA {
5500    pub const ENCODED_LEN: usize = 120usize;
5501    pub const DEFAULT: Self = Self {
5502        time_usec: 0_u64,
5503        q: [0.0_f32; 4usize],
5504        x: 0.0_f32,
5505        y: 0.0_f32,
5506        z: 0.0_f32,
5507        covariance: [0.0_f32; 21usize],
5508    };
5509    #[cfg(feature = "arbitrary")]
5510    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
5511        use arbitrary::{Arbitrary, Unstructured};
5512        let mut buf = [0u8; 1024];
5513        rng.fill_bytes(&mut buf);
5514        let mut unstructured = Unstructured::new(&buf);
5515        Self::arbitrary(&mut unstructured).unwrap_or_default()
5516    }
5517}
5518impl Default for ATT_POS_MOCAP_DATA {
5519    fn default() -> Self {
5520        Self::DEFAULT.clone()
5521    }
5522}
5523impl MessageData for ATT_POS_MOCAP_DATA {
5524    type Message = MavMessage;
5525    const ID: u32 = 138u32;
5526    const NAME: &'static str = "ATT_POS_MOCAP";
5527    const EXTRA_CRC: u8 = 109u8;
5528    const ENCODED_LEN: usize = 120usize;
5529    fn deser(
5530        _version: MavlinkVersion,
5531        __input: &[u8],
5532    ) -> Result<Self, ::mavlink_core::error::ParserError> {
5533        let avail_len = __input.len();
5534        let mut payload_buf = [0; Self::ENCODED_LEN];
5535        let mut buf = if avail_len < Self::ENCODED_LEN {
5536            payload_buf[0..avail_len].copy_from_slice(__input);
5537            Bytes::new(&payload_buf)
5538        } else {
5539            Bytes::new(__input)
5540        };
5541        let mut __struct = Self::default();
5542        __struct.time_usec = buf.get_u64_le();
5543        for v in &mut __struct.q {
5544            let val = buf.get_f32_le();
5545            *v = val;
5546        }
5547        __struct.x = buf.get_f32_le();
5548        __struct.y = buf.get_f32_le();
5549        __struct.z = buf.get_f32_le();
5550        for v in &mut __struct.covariance {
5551            let val = buf.get_f32_le();
5552            *v = val;
5553        }
5554        Ok(__struct)
5555    }
5556    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
5557        let mut __tmp = BytesMut::new(bytes);
5558        #[allow(clippy::absurd_extreme_comparisons)]
5559        #[allow(unused_comparisons)]
5560        if __tmp.remaining() < Self::ENCODED_LEN {
5561            panic!(
5562                "buffer is too small (need {} bytes, but got {})",
5563                Self::ENCODED_LEN,
5564                __tmp.remaining(),
5565            )
5566        }
5567        __tmp.put_u64_le(self.time_usec);
5568        for val in &self.q {
5569            __tmp.put_f32_le(*val);
5570        }
5571        __tmp.put_f32_le(self.x);
5572        __tmp.put_f32_le(self.y);
5573        __tmp.put_f32_le(self.z);
5574        for val in &self.covariance {
5575            __tmp.put_f32_le(*val);
5576        }
5577        if matches!(version, MavlinkVersion::V2) {
5578            let len = __tmp.len();
5579            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
5580        } else {
5581            __tmp.len()
5582        }
5583    }
5584}
5585#[doc = "id: 7"]
5586#[doc = "Emit an encrypted signature / key identifying this system. PLEASE NOTE: This protocol has been kept simple, so transmitting the key requires an encrypted channel for true safety."]
5587#[derive(Debug, Clone, PartialEq)]
5588#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5589#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5590pub struct AUTH_KEY_DATA {
5591    #[doc = "key"]
5592    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5593    pub key: [u8; 32],
5594}
5595impl AUTH_KEY_DATA {
5596    pub const ENCODED_LEN: usize = 32usize;
5597    pub const DEFAULT: Self = Self {
5598        key: [0_u8; 32usize],
5599    };
5600    #[cfg(feature = "arbitrary")]
5601    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
5602        use arbitrary::{Arbitrary, Unstructured};
5603        let mut buf = [0u8; 1024];
5604        rng.fill_bytes(&mut buf);
5605        let mut unstructured = Unstructured::new(&buf);
5606        Self::arbitrary(&mut unstructured).unwrap_or_default()
5607    }
5608}
5609impl Default for AUTH_KEY_DATA {
5610    fn default() -> Self {
5611        Self::DEFAULT.clone()
5612    }
5613}
5614impl MessageData for AUTH_KEY_DATA {
5615    type Message = MavMessage;
5616    const ID: u32 = 7u32;
5617    const NAME: &'static str = "AUTH_KEY";
5618    const EXTRA_CRC: u8 = 119u8;
5619    const ENCODED_LEN: usize = 32usize;
5620    fn deser(
5621        _version: MavlinkVersion,
5622        __input: &[u8],
5623    ) -> Result<Self, ::mavlink_core::error::ParserError> {
5624        let avail_len = __input.len();
5625        let mut payload_buf = [0; Self::ENCODED_LEN];
5626        let mut buf = if avail_len < Self::ENCODED_LEN {
5627            payload_buf[0..avail_len].copy_from_slice(__input);
5628            Bytes::new(&payload_buf)
5629        } else {
5630            Bytes::new(__input)
5631        };
5632        let mut __struct = Self::default();
5633        for v in &mut __struct.key {
5634            let val = buf.get_u8();
5635            *v = val;
5636        }
5637        Ok(__struct)
5638    }
5639    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
5640        let mut __tmp = BytesMut::new(bytes);
5641        #[allow(clippy::absurd_extreme_comparisons)]
5642        #[allow(unused_comparisons)]
5643        if __tmp.remaining() < Self::ENCODED_LEN {
5644            panic!(
5645                "buffer is too small (need {} bytes, but got {})",
5646                Self::ENCODED_LEN,
5647                __tmp.remaining(),
5648            )
5649        }
5650        for val in &self.key {
5651            __tmp.put_u8(*val);
5652        }
5653        if matches!(version, MavlinkVersion::V2) {
5654            let len = __tmp.len();
5655            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
5656        } else {
5657            __tmp.len()
5658        }
5659    }
5660}
5661#[doc = "id: 286"]
5662#[doc = "Low level message containing autopilot state relevant for a gimbal device. This message is to be sent from the autopilot to the gimbal device component. The data of this message are for the gimbal device's estimator corrections, in particular horizon compensation, as well as indicates autopilot control intentions, e.g. feed forward angular control in the z-axis."]
5663#[derive(Debug, Clone, PartialEq)]
5664#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5665#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5666pub struct AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA {
5667    #[doc = "Timestamp (time since system boot)."]
5668    pub time_boot_us: u64,
5669    #[doc = "Quaternion components of autopilot attitude: w, x, y, z (1 0 0 0 is the null-rotation, Hamilton convention)."]
5670    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5671    pub q: [f32; 4],
5672    #[doc = "Estimated delay of the attitude data. 0 if unknown."]
5673    pub q_estimated_delay_us: u32,
5674    #[doc = "X Speed in NED (North, East, Down). NAN if unknown."]
5675    pub vx: f32,
5676    #[doc = "Y Speed in NED (North, East, Down). NAN if unknown."]
5677    pub vy: f32,
5678    #[doc = "Z Speed in NED (North, East, Down). NAN if unknown."]
5679    pub vz: f32,
5680    #[doc = "Estimated delay of the speed data. 0 if unknown."]
5681    pub v_estimated_delay_us: u32,
5682    #[doc = "Feed forward Z component of angular velocity (positive: yawing to the right). NaN to be ignored. This is to indicate if the autopilot is actively yawing."]
5683    pub feed_forward_angular_velocity_z: f32,
5684    #[doc = "Bitmap indicating which estimator outputs are valid."]
5685    pub estimator_status: EstimatorStatusFlags,
5686    #[doc = "System ID"]
5687    pub target_system: u8,
5688    #[doc = "Component ID"]
5689    pub target_component: u8,
5690    #[doc = "The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown."]
5691    pub landed_state: MavLandedState,
5692    #[doc = "Z component of angular velocity in NED (North, East, Down). NaN if unknown."]
5693    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
5694    pub angular_velocity_z: f32,
5695}
5696impl AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA {
5697    pub const ENCODED_LEN: usize = 57usize;
5698    pub const DEFAULT: Self = Self {
5699        time_boot_us: 0_u64,
5700        q: [0.0_f32; 4usize],
5701        q_estimated_delay_us: 0_u32,
5702        vx: 0.0_f32,
5703        vy: 0.0_f32,
5704        vz: 0.0_f32,
5705        v_estimated_delay_us: 0_u32,
5706        feed_forward_angular_velocity_z: 0.0_f32,
5707        estimator_status: EstimatorStatusFlags::DEFAULT,
5708        target_system: 0_u8,
5709        target_component: 0_u8,
5710        landed_state: MavLandedState::DEFAULT,
5711        angular_velocity_z: 0.0_f32,
5712    };
5713    #[cfg(feature = "arbitrary")]
5714    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
5715        use arbitrary::{Arbitrary, Unstructured};
5716        let mut buf = [0u8; 1024];
5717        rng.fill_bytes(&mut buf);
5718        let mut unstructured = Unstructured::new(&buf);
5719        Self::arbitrary(&mut unstructured).unwrap_or_default()
5720    }
5721}
5722impl Default for AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA {
5723    fn default() -> Self {
5724        Self::DEFAULT.clone()
5725    }
5726}
5727impl MessageData for AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA {
5728    type Message = MavMessage;
5729    const ID: u32 = 286u32;
5730    const NAME: &'static str = "AUTOPILOT_STATE_FOR_GIMBAL_DEVICE";
5731    const EXTRA_CRC: u8 = 210u8;
5732    const ENCODED_LEN: usize = 57usize;
5733    fn deser(
5734        _version: MavlinkVersion,
5735        __input: &[u8],
5736    ) -> Result<Self, ::mavlink_core::error::ParserError> {
5737        let avail_len = __input.len();
5738        let mut payload_buf = [0; Self::ENCODED_LEN];
5739        let mut buf = if avail_len < Self::ENCODED_LEN {
5740            payload_buf[0..avail_len].copy_from_slice(__input);
5741            Bytes::new(&payload_buf)
5742        } else {
5743            Bytes::new(__input)
5744        };
5745        let mut __struct = Self::default();
5746        __struct.time_boot_us = buf.get_u64_le();
5747        for v in &mut __struct.q {
5748            let val = buf.get_f32_le();
5749            *v = val;
5750        }
5751        __struct.q_estimated_delay_us = buf.get_u32_le();
5752        __struct.vx = buf.get_f32_le();
5753        __struct.vy = buf.get_f32_le();
5754        __struct.vz = buf.get_f32_le();
5755        __struct.v_estimated_delay_us = buf.get_u32_le();
5756        __struct.feed_forward_angular_velocity_z = buf.get_f32_le();
5757        let tmp = buf.get_u16_le();
5758        __struct.estimator_status = EstimatorStatusFlags::from_bits(
5759            tmp & EstimatorStatusFlags::all().bits(),
5760        )
5761        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
5762            flag_type: "EstimatorStatusFlags",
5763            value: tmp as u32,
5764        })?;
5765        __struct.target_system = buf.get_u8();
5766        __struct.target_component = buf.get_u8();
5767        let tmp = buf.get_u8();
5768        __struct.landed_state =
5769            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
5770                enum_type: "MavLandedState",
5771                value: tmp as u32,
5772            })?;
5773        __struct.angular_velocity_z = buf.get_f32_le();
5774        Ok(__struct)
5775    }
5776    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
5777        let mut __tmp = BytesMut::new(bytes);
5778        #[allow(clippy::absurd_extreme_comparisons)]
5779        #[allow(unused_comparisons)]
5780        if __tmp.remaining() < Self::ENCODED_LEN {
5781            panic!(
5782                "buffer is too small (need {} bytes, but got {})",
5783                Self::ENCODED_LEN,
5784                __tmp.remaining(),
5785            )
5786        }
5787        __tmp.put_u64_le(self.time_boot_us);
5788        for val in &self.q {
5789            __tmp.put_f32_le(*val);
5790        }
5791        __tmp.put_u32_le(self.q_estimated_delay_us);
5792        __tmp.put_f32_le(self.vx);
5793        __tmp.put_f32_le(self.vy);
5794        __tmp.put_f32_le(self.vz);
5795        __tmp.put_u32_le(self.v_estimated_delay_us);
5796        __tmp.put_f32_le(self.feed_forward_angular_velocity_z);
5797        __tmp.put_u16_le(self.estimator_status.bits());
5798        __tmp.put_u8(self.target_system);
5799        __tmp.put_u8(self.target_component);
5800        __tmp.put_u8(self.landed_state as u8);
5801        __tmp.put_f32_le(self.angular_velocity_z);
5802        if matches!(version, MavlinkVersion::V2) {
5803            let len = __tmp.len();
5804            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
5805        } else {
5806            __tmp.len()
5807        }
5808    }
5809}
5810#[doc = "id: 148"]
5811#[doc = "Version and capability of autopilot software. This should be emitted in response to a request with MAV_CMD_REQUEST_MESSAGE."]
5812#[derive(Debug, Clone, PartialEq)]
5813#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5814#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5815pub struct AUTOPILOT_VERSION_DATA {
5816    #[doc = "Bitmap of capabilities"]
5817    pub capabilities: MavProtocolCapability,
5818    #[doc = "UID if provided by hardware (see uid2)"]
5819    pub uid: u64,
5820    #[doc = "Firmware version number.         The field must be encoded as 4 bytes, where each byte (shown from MSB to LSB) is part of a semantic version: (major) (minor) (patch) (FIRMWARE_VERSION_TYPE)."]
5821    pub flight_sw_version: u32,
5822    #[doc = "Middleware version number"]
5823    pub middleware_sw_version: u32,
5824    #[doc = "Operating system version number"]
5825    pub os_sw_version: u32,
5826    #[doc = "HW / board version (last 8 bits should be silicon ID, if any). The first 16 bits of this field specify <https://github.com/PX4/PX4-Bootloader/blob/master/board_types.txt>"]
5827    pub board_version: u32,
5828    #[doc = "ID of the board vendor"]
5829    pub vendor_id: u16,
5830    #[doc = "ID of the product"]
5831    pub product_id: u16,
5832    #[doc = "Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases."]
5833    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5834    pub flight_custom_version: [u8; 8],
5835    #[doc = "Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases."]
5836    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5837    pub middleware_custom_version: [u8; 8],
5838    #[doc = "Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases."]
5839    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5840    pub os_custom_version: [u8; 8],
5841    #[doc = "UID if provided by hardware (supersedes the uid field. If this is non-zero, use this field, otherwise use uid)"]
5842    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
5843    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5844    pub uid2: [u8; 18],
5845}
5846impl AUTOPILOT_VERSION_DATA {
5847    pub const ENCODED_LEN: usize = 78usize;
5848    pub const DEFAULT: Self = Self {
5849        capabilities: MavProtocolCapability::DEFAULT,
5850        uid: 0_u64,
5851        flight_sw_version: 0_u32,
5852        middleware_sw_version: 0_u32,
5853        os_sw_version: 0_u32,
5854        board_version: 0_u32,
5855        vendor_id: 0_u16,
5856        product_id: 0_u16,
5857        flight_custom_version: [0_u8; 8usize],
5858        middleware_custom_version: [0_u8; 8usize],
5859        os_custom_version: [0_u8; 8usize],
5860        uid2: [0_u8; 18usize],
5861    };
5862    #[cfg(feature = "arbitrary")]
5863    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
5864        use arbitrary::{Arbitrary, Unstructured};
5865        let mut buf = [0u8; 1024];
5866        rng.fill_bytes(&mut buf);
5867        let mut unstructured = Unstructured::new(&buf);
5868        Self::arbitrary(&mut unstructured).unwrap_or_default()
5869    }
5870}
5871impl Default for AUTOPILOT_VERSION_DATA {
5872    fn default() -> Self {
5873        Self::DEFAULT.clone()
5874    }
5875}
5876impl MessageData for AUTOPILOT_VERSION_DATA {
5877    type Message = MavMessage;
5878    const ID: u32 = 148u32;
5879    const NAME: &'static str = "AUTOPILOT_VERSION";
5880    const EXTRA_CRC: u8 = 178u8;
5881    const ENCODED_LEN: usize = 78usize;
5882    fn deser(
5883        _version: MavlinkVersion,
5884        __input: &[u8],
5885    ) -> Result<Self, ::mavlink_core::error::ParserError> {
5886        let avail_len = __input.len();
5887        let mut payload_buf = [0; Self::ENCODED_LEN];
5888        let mut buf = if avail_len < Self::ENCODED_LEN {
5889            payload_buf[0..avail_len].copy_from_slice(__input);
5890            Bytes::new(&payload_buf)
5891        } else {
5892            Bytes::new(__input)
5893        };
5894        let mut __struct = Self::default();
5895        let tmp = buf.get_u64_le();
5896        __struct.capabilities = MavProtocolCapability::from_bits(
5897            tmp & MavProtocolCapability::all().bits(),
5898        )
5899        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
5900            flag_type: "MavProtocolCapability",
5901            value: tmp as u32,
5902        })?;
5903        __struct.uid = buf.get_u64_le();
5904        __struct.flight_sw_version = buf.get_u32_le();
5905        __struct.middleware_sw_version = buf.get_u32_le();
5906        __struct.os_sw_version = buf.get_u32_le();
5907        __struct.board_version = buf.get_u32_le();
5908        __struct.vendor_id = buf.get_u16_le();
5909        __struct.product_id = buf.get_u16_le();
5910        for v in &mut __struct.flight_custom_version {
5911            let val = buf.get_u8();
5912            *v = val;
5913        }
5914        for v in &mut __struct.middleware_custom_version {
5915            let val = buf.get_u8();
5916            *v = val;
5917        }
5918        for v in &mut __struct.os_custom_version {
5919            let val = buf.get_u8();
5920            *v = val;
5921        }
5922        for v in &mut __struct.uid2 {
5923            let val = buf.get_u8();
5924            *v = val;
5925        }
5926        Ok(__struct)
5927    }
5928    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
5929        let mut __tmp = BytesMut::new(bytes);
5930        #[allow(clippy::absurd_extreme_comparisons)]
5931        #[allow(unused_comparisons)]
5932        if __tmp.remaining() < Self::ENCODED_LEN {
5933            panic!(
5934                "buffer is too small (need {} bytes, but got {})",
5935                Self::ENCODED_LEN,
5936                __tmp.remaining(),
5937            )
5938        }
5939        __tmp.put_u64_le(self.capabilities.bits());
5940        __tmp.put_u64_le(self.uid);
5941        __tmp.put_u32_le(self.flight_sw_version);
5942        __tmp.put_u32_le(self.middleware_sw_version);
5943        __tmp.put_u32_le(self.os_sw_version);
5944        __tmp.put_u32_le(self.board_version);
5945        __tmp.put_u16_le(self.vendor_id);
5946        __tmp.put_u16_le(self.product_id);
5947        for val in &self.flight_custom_version {
5948            __tmp.put_u8(*val);
5949        }
5950        for val in &self.middleware_custom_version {
5951            __tmp.put_u8(*val);
5952        }
5953        for val in &self.os_custom_version {
5954            __tmp.put_u8(*val);
5955        }
5956        for val in &self.uid2 {
5957            __tmp.put_u8(*val);
5958        }
5959        if matches!(version, MavlinkVersion::V2) {
5960            let len = __tmp.len();
5961            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
5962        } else {
5963            __tmp.len()
5964        }
5965    }
5966}
5967#[doc = "id: 435"]
5968#[doc = "Information about a flight mode.          The message can be enumerated to get information for all modes, or requested for a particular mode, using MAV_CMD_REQUEST_MESSAGE.         Specify 0 in param2 to request that the message is emitted for all available modes or the specific index for just one mode.         The modes must be available/settable for the current vehicle/frame type.         Each mode should only be emitted once (even if it is both standard and custom).         Note that the current mode should be emitted in CURRENT_MODE, and that if the mode list can change then AVAILABLE_MODES_MONITOR must be emitted on first change and subsequently streamed.         See <https://mavlink.io/en/services/standard_modes.html>."]
5969#[derive(Debug, Clone, PartialEq)]
5970#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5971#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5972pub struct AVAILABLE_MODES_DATA {
5973    #[doc = "A bitfield for use for autopilot-specific flags"]
5974    pub custom_mode: u32,
5975    #[doc = "Mode properties."]
5976    pub properties: MavModeProperty,
5977    #[doc = "The total number of available modes for the current vehicle type."]
5978    pub number_modes: u8,
5979    #[doc = "The current mode index within number_modes, indexed from 1. The index is not guaranteed to be persistent, and may change between reboots or if the set of modes change."]
5980    pub mode_index: u8,
5981    #[doc = "Standard mode."]
5982    pub standard_mode: MavStandardMode,
5983    #[doc = "Name of custom mode, with null termination character. Should be omitted for standard modes."]
5984    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
5985    pub mode_name: [u8; 35],
5986}
5987impl AVAILABLE_MODES_DATA {
5988    pub const ENCODED_LEN: usize = 46usize;
5989    pub const DEFAULT: Self = Self {
5990        custom_mode: 0_u32,
5991        properties: MavModeProperty::DEFAULT,
5992        number_modes: 0_u8,
5993        mode_index: 0_u8,
5994        standard_mode: MavStandardMode::DEFAULT,
5995        mode_name: [0_u8; 35usize],
5996    };
5997    #[cfg(feature = "arbitrary")]
5998    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
5999        use arbitrary::{Arbitrary, Unstructured};
6000        let mut buf = [0u8; 1024];
6001        rng.fill_bytes(&mut buf);
6002        let mut unstructured = Unstructured::new(&buf);
6003        Self::arbitrary(&mut unstructured).unwrap_or_default()
6004    }
6005}
6006impl Default for AVAILABLE_MODES_DATA {
6007    fn default() -> Self {
6008        Self::DEFAULT.clone()
6009    }
6010}
6011impl MessageData for AVAILABLE_MODES_DATA {
6012    type Message = MavMessage;
6013    const ID: u32 = 435u32;
6014    const NAME: &'static str = "AVAILABLE_MODES";
6015    const EXTRA_CRC: u8 = 134u8;
6016    const ENCODED_LEN: usize = 46usize;
6017    fn deser(
6018        _version: MavlinkVersion,
6019        __input: &[u8],
6020    ) -> Result<Self, ::mavlink_core::error::ParserError> {
6021        let avail_len = __input.len();
6022        let mut payload_buf = [0; Self::ENCODED_LEN];
6023        let mut buf = if avail_len < Self::ENCODED_LEN {
6024            payload_buf[0..avail_len].copy_from_slice(__input);
6025            Bytes::new(&payload_buf)
6026        } else {
6027            Bytes::new(__input)
6028        };
6029        let mut __struct = Self::default();
6030        __struct.custom_mode = buf.get_u32_le();
6031        let tmp = buf.get_u32_le();
6032        __struct.properties = MavModeProperty::from_bits(tmp & MavModeProperty::all().bits())
6033            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
6034                flag_type: "MavModeProperty",
6035                value: tmp as u32,
6036            })?;
6037        __struct.number_modes = buf.get_u8();
6038        __struct.mode_index = buf.get_u8();
6039        let tmp = buf.get_u8();
6040        __struct.standard_mode =
6041            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
6042                enum_type: "MavStandardMode",
6043                value: tmp as u32,
6044            })?;
6045        for v in &mut __struct.mode_name {
6046            let val = buf.get_u8();
6047            *v = val;
6048        }
6049        Ok(__struct)
6050    }
6051    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
6052        let mut __tmp = BytesMut::new(bytes);
6053        #[allow(clippy::absurd_extreme_comparisons)]
6054        #[allow(unused_comparisons)]
6055        if __tmp.remaining() < Self::ENCODED_LEN {
6056            panic!(
6057                "buffer is too small (need {} bytes, but got {})",
6058                Self::ENCODED_LEN,
6059                __tmp.remaining(),
6060            )
6061        }
6062        __tmp.put_u32_le(self.custom_mode);
6063        __tmp.put_u32_le(self.properties.bits());
6064        __tmp.put_u8(self.number_modes);
6065        __tmp.put_u8(self.mode_index);
6066        __tmp.put_u8(self.standard_mode as u8);
6067        for val in &self.mode_name {
6068            __tmp.put_u8(*val);
6069        }
6070        if matches!(version, MavlinkVersion::V2) {
6071            let len = __tmp.len();
6072            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
6073        } else {
6074            __tmp.len()
6075        }
6076    }
6077}
6078#[doc = "id: 437"]
6079#[doc = "A change to the sequence number indicates that the set of AVAILABLE_MODES has changed.         A receiver must re-request all available modes whenever the sequence number changes.         This is only emitted after the first change and should then be broadcast at low rate (nominally 0.3 Hz) and on change.         See <https://mavlink.io/en/services/standard_modes.html>."]
6080#[derive(Debug, Clone, PartialEq)]
6081#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
6082#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6083pub struct AVAILABLE_MODES_MONITOR_DATA {
6084    #[doc = "Sequence number. The value iterates sequentially whenever AVAILABLE_MODES changes (e.g. support for a new mode is added/removed dynamically)."]
6085    pub seq: u8,
6086}
6087impl AVAILABLE_MODES_MONITOR_DATA {
6088    pub const ENCODED_LEN: usize = 1usize;
6089    pub const DEFAULT: Self = Self { seq: 0_u8 };
6090    #[cfg(feature = "arbitrary")]
6091    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
6092        use arbitrary::{Arbitrary, Unstructured};
6093        let mut buf = [0u8; 1024];
6094        rng.fill_bytes(&mut buf);
6095        let mut unstructured = Unstructured::new(&buf);
6096        Self::arbitrary(&mut unstructured).unwrap_or_default()
6097    }
6098}
6099impl Default for AVAILABLE_MODES_MONITOR_DATA {
6100    fn default() -> Self {
6101        Self::DEFAULT.clone()
6102    }
6103}
6104impl MessageData for AVAILABLE_MODES_MONITOR_DATA {
6105    type Message = MavMessage;
6106    const ID: u32 = 437u32;
6107    const NAME: &'static str = "AVAILABLE_MODES_MONITOR";
6108    const EXTRA_CRC: u8 = 30u8;
6109    const ENCODED_LEN: usize = 1usize;
6110    fn deser(
6111        _version: MavlinkVersion,
6112        __input: &[u8],
6113    ) -> Result<Self, ::mavlink_core::error::ParserError> {
6114        let avail_len = __input.len();
6115        let mut payload_buf = [0; Self::ENCODED_LEN];
6116        let mut buf = if avail_len < Self::ENCODED_LEN {
6117            payload_buf[0..avail_len].copy_from_slice(__input);
6118            Bytes::new(&payload_buf)
6119        } else {
6120            Bytes::new(__input)
6121        };
6122        let mut __struct = Self::default();
6123        __struct.seq = buf.get_u8();
6124        Ok(__struct)
6125    }
6126    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
6127        let mut __tmp = BytesMut::new(bytes);
6128        #[allow(clippy::absurd_extreme_comparisons)]
6129        #[allow(unused_comparisons)]
6130        if __tmp.remaining() < Self::ENCODED_LEN {
6131            panic!(
6132                "buffer is too small (need {} bytes, but got {})",
6133                Self::ENCODED_LEN,
6134                __tmp.remaining(),
6135            )
6136        }
6137        __tmp.put_u8(self.seq);
6138        if matches!(version, MavlinkVersion::V2) {
6139            let len = __tmp.len();
6140            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
6141        } else {
6142            __tmp.len()
6143        }
6144    }
6145}
6146#[doc = "id: 372"]
6147#[doc = "Battery information that is static, or requires infrequent update.         This message should requested using MAV_CMD_REQUEST_MESSAGE and/or streamed at very low rate.         BATTERY_STATUS_V2 is used for higher-rate battery status information."]
6148#[derive(Debug, Clone, PartialEq)]
6149#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
6150#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6151pub struct BATTERY_INFO_DATA {
6152    #[doc = "Minimum per-cell voltage when discharging. 0: field not provided."]
6153    pub discharge_minimum_voltage: f32,
6154    #[doc = "Minimum per-cell voltage when charging. 0: field not provided."]
6155    pub charging_minimum_voltage: f32,
6156    #[doc = "Minimum per-cell voltage when resting. 0: field not provided."]
6157    pub resting_minimum_voltage: f32,
6158    #[doc = "Maximum per-cell voltage when charged. 0: field not provided."]
6159    pub charging_maximum_voltage: f32,
6160    #[doc = "Maximum pack continuous charge current. 0: field not provided."]
6161    pub charging_maximum_current: f32,
6162    #[doc = "Battery nominal voltage. Used for conversion between Wh and Ah. 0: field not provided."]
6163    pub nominal_voltage: f32,
6164    #[doc = "Maximum pack discharge current. 0: field not provided."]
6165    pub discharge_maximum_current: f32,
6166    #[doc = "Maximum pack discharge burst current. 0: field not provided."]
6167    pub discharge_maximum_burst_current: f32,
6168    #[doc = "Fully charged design capacity. 0: field not provided."]
6169    pub design_capacity: f32,
6170    #[doc = "Predicted battery capacity when fully charged (accounting for battery degradation). NAN: field not provided."]
6171    pub full_charge_capacity: f32,
6172    #[doc = "Lifetime count of the number of charge/discharge cycles (<https://en.wikipedia.org/wiki/Charge_cycle>). UINT16_MAX: field not provided."]
6173    pub cycle_count: u16,
6174    #[doc = "Battery weight. 0: field not provided."]
6175    pub weight: u16,
6176    #[doc = "Battery ID"]
6177    pub id: u8,
6178    #[doc = "Function of the battery."]
6179    pub battery_function: MavBatteryFunction,
6180    #[doc = "Type (chemistry) of the battery."]
6181    pub mavtype: MavBatteryType,
6182    #[doc = "State of Health (SOH) estimate. Typically 100% at the time of manufacture and will decrease over time and use. -1: field not provided."]
6183    pub state_of_health: u8,
6184    #[doc = "Number of battery cells in series. 0: field not provided."]
6185    pub cells_in_series: u8,
6186    #[doc = "Manufacture date (DDMMYYYY) in ASCII characters, 0 terminated. All 0: field not provided."]
6187    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
6188    pub manufacture_date: [u8; 9],
6189    #[doc = "Serial number in ASCII characters, 0 terminated. All 0: field not provided."]
6190    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
6191    pub serial_number: [u8; 32],
6192    #[doc = "Battery device name. Formatted as manufacturer name then product name, separated with an underscore (in ASCII characters), 0 terminated. All 0: field not provided."]
6193    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
6194    pub name: [u8; 50],
6195}
6196impl BATTERY_INFO_DATA {
6197    pub const ENCODED_LEN: usize = 140usize;
6198    pub const DEFAULT: Self = Self {
6199        discharge_minimum_voltage: 0.0_f32,
6200        charging_minimum_voltage: 0.0_f32,
6201        resting_minimum_voltage: 0.0_f32,
6202        charging_maximum_voltage: 0.0_f32,
6203        charging_maximum_current: 0.0_f32,
6204        nominal_voltage: 0.0_f32,
6205        discharge_maximum_current: 0.0_f32,
6206        discharge_maximum_burst_current: 0.0_f32,
6207        design_capacity: 0.0_f32,
6208        full_charge_capacity: 0.0_f32,
6209        cycle_count: 0_u16,
6210        weight: 0_u16,
6211        id: 0_u8,
6212        battery_function: MavBatteryFunction::DEFAULT,
6213        mavtype: MavBatteryType::DEFAULT,
6214        state_of_health: 0_u8,
6215        cells_in_series: 0_u8,
6216        manufacture_date: [0_u8; 9usize],
6217        serial_number: [0_u8; 32usize],
6218        name: [0_u8; 50usize],
6219    };
6220    #[cfg(feature = "arbitrary")]
6221    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
6222        use arbitrary::{Arbitrary, Unstructured};
6223        let mut buf = [0u8; 1024];
6224        rng.fill_bytes(&mut buf);
6225        let mut unstructured = Unstructured::new(&buf);
6226        Self::arbitrary(&mut unstructured).unwrap_or_default()
6227    }
6228}
6229impl Default for BATTERY_INFO_DATA {
6230    fn default() -> Self {
6231        Self::DEFAULT.clone()
6232    }
6233}
6234impl MessageData for BATTERY_INFO_DATA {
6235    type Message = MavMessage;
6236    const ID: u32 = 372u32;
6237    const NAME: &'static str = "BATTERY_INFO";
6238    const EXTRA_CRC: u8 = 26u8;
6239    const ENCODED_LEN: usize = 140usize;
6240    fn deser(
6241        _version: MavlinkVersion,
6242        __input: &[u8],
6243    ) -> Result<Self, ::mavlink_core::error::ParserError> {
6244        let avail_len = __input.len();
6245        let mut payload_buf = [0; Self::ENCODED_LEN];
6246        let mut buf = if avail_len < Self::ENCODED_LEN {
6247            payload_buf[0..avail_len].copy_from_slice(__input);
6248            Bytes::new(&payload_buf)
6249        } else {
6250            Bytes::new(__input)
6251        };
6252        let mut __struct = Self::default();
6253        __struct.discharge_minimum_voltage = buf.get_f32_le();
6254        __struct.charging_minimum_voltage = buf.get_f32_le();
6255        __struct.resting_minimum_voltage = buf.get_f32_le();
6256        __struct.charging_maximum_voltage = buf.get_f32_le();
6257        __struct.charging_maximum_current = buf.get_f32_le();
6258        __struct.nominal_voltage = buf.get_f32_le();
6259        __struct.discharge_maximum_current = buf.get_f32_le();
6260        __struct.discharge_maximum_burst_current = buf.get_f32_le();
6261        __struct.design_capacity = buf.get_f32_le();
6262        __struct.full_charge_capacity = buf.get_f32_le();
6263        __struct.cycle_count = buf.get_u16_le();
6264        __struct.weight = buf.get_u16_le();
6265        __struct.id = buf.get_u8();
6266        let tmp = buf.get_u8();
6267        __struct.battery_function =
6268            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
6269                enum_type: "MavBatteryFunction",
6270                value: tmp as u32,
6271            })?;
6272        let tmp = buf.get_u8();
6273        __struct.mavtype =
6274            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
6275                enum_type: "MavBatteryType",
6276                value: tmp as u32,
6277            })?;
6278        __struct.state_of_health = buf.get_u8();
6279        __struct.cells_in_series = buf.get_u8();
6280        for v in &mut __struct.manufacture_date {
6281            let val = buf.get_u8();
6282            *v = val;
6283        }
6284        for v in &mut __struct.serial_number {
6285            let val = buf.get_u8();
6286            *v = val;
6287        }
6288        for v in &mut __struct.name {
6289            let val = buf.get_u8();
6290            *v = val;
6291        }
6292        Ok(__struct)
6293    }
6294    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
6295        let mut __tmp = BytesMut::new(bytes);
6296        #[allow(clippy::absurd_extreme_comparisons)]
6297        #[allow(unused_comparisons)]
6298        if __tmp.remaining() < Self::ENCODED_LEN {
6299            panic!(
6300                "buffer is too small (need {} bytes, but got {})",
6301                Self::ENCODED_LEN,
6302                __tmp.remaining(),
6303            )
6304        }
6305        __tmp.put_f32_le(self.discharge_minimum_voltage);
6306        __tmp.put_f32_le(self.charging_minimum_voltage);
6307        __tmp.put_f32_le(self.resting_minimum_voltage);
6308        __tmp.put_f32_le(self.charging_maximum_voltage);
6309        __tmp.put_f32_le(self.charging_maximum_current);
6310        __tmp.put_f32_le(self.nominal_voltage);
6311        __tmp.put_f32_le(self.discharge_maximum_current);
6312        __tmp.put_f32_le(self.discharge_maximum_burst_current);
6313        __tmp.put_f32_le(self.design_capacity);
6314        __tmp.put_f32_le(self.full_charge_capacity);
6315        __tmp.put_u16_le(self.cycle_count);
6316        __tmp.put_u16_le(self.weight);
6317        __tmp.put_u8(self.id);
6318        __tmp.put_u8(self.battery_function as u8);
6319        __tmp.put_u8(self.mavtype as u8);
6320        __tmp.put_u8(self.state_of_health);
6321        __tmp.put_u8(self.cells_in_series);
6322        for val in &self.manufacture_date {
6323            __tmp.put_u8(*val);
6324        }
6325        for val in &self.serial_number {
6326            __tmp.put_u8(*val);
6327        }
6328        for val in &self.name {
6329            __tmp.put_u8(*val);
6330        }
6331        if matches!(version, MavlinkVersion::V2) {
6332            let len = __tmp.len();
6333            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
6334        } else {
6335            __tmp.len()
6336        }
6337    }
6338}
6339#[doc = "id: 147"]
6340#[doc = "Battery information. Updates GCS with flight controller battery status. Smart batteries also use this message, but may additionally send BATTERY_INFO."]
6341#[derive(Debug, Clone, PartialEq)]
6342#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
6343#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6344pub struct BATTERY_STATUS_DATA {
6345    #[doc = "Consumed charge, -1: autopilot does not provide consumption estimate"]
6346    pub current_consumed: i32,
6347    #[doc = "Consumed energy, -1: autopilot does not provide energy consumption estimate"]
6348    pub energy_consumed: i32,
6349    #[doc = "Temperature of the battery. INT16_MAX for unknown temperature."]
6350    pub temperature: i16,
6351    #[doc = "Battery voltage of cells 1 to 10 (see voltages_ext for cells 11-14). Cells in this field above the valid cell count for this battery should have the UINT16_MAX value. If individual cell voltages are unknown or not measured for this battery, then the overall battery voltage should be filled in cell 0, with all others set to UINT16_MAX. If the voltage of the battery is greater than (UINT16_MAX - 1), then cell 0 should be set to (UINT16_MAX - 1), and cell 1 to the remaining voltage. This can be extended to multiple cells if the total voltage is greater than 2 * (UINT16_MAX - 1)."]
6352    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
6353    pub voltages: [u16; 10],
6354    #[doc = "Battery current, -1: autopilot does not measure the current"]
6355    pub current_battery: i16,
6356    #[doc = "Battery ID"]
6357    pub id: u8,
6358    #[doc = "Function of the battery"]
6359    pub battery_function: MavBatteryFunction,
6360    #[doc = "Type (chemistry) of the battery"]
6361    pub mavtype: MavBatteryType,
6362    #[doc = "Remaining battery energy. Values: [0-100], -1: autopilot does not estimate the remaining battery."]
6363    pub battery_remaining: i8,
6364    #[doc = "Remaining battery time, 0: autopilot does not provide remaining battery time estimate"]
6365    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
6366    pub time_remaining: i32,
6367    #[doc = "State for extent of discharge, provided by autopilot for warning or external reactions"]
6368    #[cfg_attr(feature = "serde", serde(default))]
6369    pub charge_state: MavBatteryChargeState,
6370    #[doc = "Battery voltages for cells 11 to 14. Cells above the valid cell count for this battery should have a value of 0, where zero indicates not supported (note, this is different than for the voltages field and allows empty byte truncation). If the measured value is 0 then 1 should be sent instead."]
6371    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
6372    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
6373    pub voltages_ext: [u16; 4],
6374    #[doc = "Battery mode. Default (0) is that battery mode reporting is not supported or battery is in normal-use mode."]
6375    #[cfg_attr(feature = "serde", serde(default))]
6376    pub mode: MavBatteryMode,
6377    #[doc = "Fault/health indications. These should be set when charge_state is MAV_BATTERY_CHARGE_STATE_FAILED or MAV_BATTERY_CHARGE_STATE_UNHEALTHY (if not, fault reporting is not supported)."]
6378    #[cfg_attr(feature = "serde", serde(default))]
6379    pub fault_bitmask: MavBatteryFault,
6380}
6381impl BATTERY_STATUS_DATA {
6382    pub const ENCODED_LEN: usize = 54usize;
6383    pub const DEFAULT: Self = Self {
6384        current_consumed: 0_i32,
6385        energy_consumed: 0_i32,
6386        temperature: 0_i16,
6387        voltages: [0_u16; 10usize],
6388        current_battery: 0_i16,
6389        id: 0_u8,
6390        battery_function: MavBatteryFunction::DEFAULT,
6391        mavtype: MavBatteryType::DEFAULT,
6392        battery_remaining: 0_i8,
6393        time_remaining: 0_i32,
6394        charge_state: MavBatteryChargeState::DEFAULT,
6395        voltages_ext: [0_u16; 4usize],
6396        mode: MavBatteryMode::DEFAULT,
6397        fault_bitmask: MavBatteryFault::DEFAULT,
6398    };
6399    #[cfg(feature = "arbitrary")]
6400    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
6401        use arbitrary::{Arbitrary, Unstructured};
6402        let mut buf = [0u8; 1024];
6403        rng.fill_bytes(&mut buf);
6404        let mut unstructured = Unstructured::new(&buf);
6405        Self::arbitrary(&mut unstructured).unwrap_or_default()
6406    }
6407}
6408impl Default for BATTERY_STATUS_DATA {
6409    fn default() -> Self {
6410        Self::DEFAULT.clone()
6411    }
6412}
6413impl MessageData for BATTERY_STATUS_DATA {
6414    type Message = MavMessage;
6415    const ID: u32 = 147u32;
6416    const NAME: &'static str = "BATTERY_STATUS";
6417    const EXTRA_CRC: u8 = 154u8;
6418    const ENCODED_LEN: usize = 54usize;
6419    fn deser(
6420        _version: MavlinkVersion,
6421        __input: &[u8],
6422    ) -> Result<Self, ::mavlink_core::error::ParserError> {
6423        let avail_len = __input.len();
6424        let mut payload_buf = [0; Self::ENCODED_LEN];
6425        let mut buf = if avail_len < Self::ENCODED_LEN {
6426            payload_buf[0..avail_len].copy_from_slice(__input);
6427            Bytes::new(&payload_buf)
6428        } else {
6429            Bytes::new(__input)
6430        };
6431        let mut __struct = Self::default();
6432        __struct.current_consumed = buf.get_i32_le();
6433        __struct.energy_consumed = buf.get_i32_le();
6434        __struct.temperature = buf.get_i16_le();
6435        for v in &mut __struct.voltages {
6436            let val = buf.get_u16_le();
6437            *v = val;
6438        }
6439        __struct.current_battery = buf.get_i16_le();
6440        __struct.id = buf.get_u8();
6441        let tmp = buf.get_u8();
6442        __struct.battery_function =
6443            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
6444                enum_type: "MavBatteryFunction",
6445                value: tmp as u32,
6446            })?;
6447        let tmp = buf.get_u8();
6448        __struct.mavtype =
6449            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
6450                enum_type: "MavBatteryType",
6451                value: tmp as u32,
6452            })?;
6453        __struct.battery_remaining = buf.get_i8();
6454        __struct.time_remaining = buf.get_i32_le();
6455        let tmp = buf.get_u8();
6456        __struct.charge_state =
6457            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
6458                enum_type: "MavBatteryChargeState",
6459                value: tmp as u32,
6460            })?;
6461        for v in &mut __struct.voltages_ext {
6462            let val = buf.get_u16_le();
6463            *v = val;
6464        }
6465        let tmp = buf.get_u8();
6466        __struct.mode =
6467            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
6468                enum_type: "MavBatteryMode",
6469                value: tmp as u32,
6470            })?;
6471        let tmp = buf.get_u32_le();
6472        __struct.fault_bitmask = MavBatteryFault::from_bits(tmp & MavBatteryFault::all().bits())
6473            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
6474                flag_type: "MavBatteryFault",
6475                value: tmp as u32,
6476            })?;
6477        Ok(__struct)
6478    }
6479    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
6480        let mut __tmp = BytesMut::new(bytes);
6481        #[allow(clippy::absurd_extreme_comparisons)]
6482        #[allow(unused_comparisons)]
6483        if __tmp.remaining() < Self::ENCODED_LEN {
6484            panic!(
6485                "buffer is too small (need {} bytes, but got {})",
6486                Self::ENCODED_LEN,
6487                __tmp.remaining(),
6488            )
6489        }
6490        __tmp.put_i32_le(self.current_consumed);
6491        __tmp.put_i32_le(self.energy_consumed);
6492        __tmp.put_i16_le(self.temperature);
6493        for val in &self.voltages {
6494            __tmp.put_u16_le(*val);
6495        }
6496        __tmp.put_i16_le(self.current_battery);
6497        __tmp.put_u8(self.id);
6498        __tmp.put_u8(self.battery_function as u8);
6499        __tmp.put_u8(self.mavtype as u8);
6500        __tmp.put_i8(self.battery_remaining);
6501        __tmp.put_i32_le(self.time_remaining);
6502        __tmp.put_u8(self.charge_state as u8);
6503        for val in &self.voltages_ext {
6504            __tmp.put_u16_le(*val);
6505        }
6506        __tmp.put_u8(self.mode as u8);
6507        __tmp.put_u32_le(self.fault_bitmask.bits());
6508        if matches!(version, MavlinkVersion::V2) {
6509            let len = __tmp.len();
6510            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
6511        } else {
6512            __tmp.len()
6513        }
6514    }
6515}
6516#[doc = "id: 257"]
6517#[doc = "Report button state change."]
6518#[derive(Debug, Clone, PartialEq)]
6519#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
6520#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6521pub struct BUTTON_CHANGE_DATA {
6522    #[doc = "Timestamp (time since system boot)."]
6523    pub time_boot_ms: u32,
6524    #[doc = "Time of last change of button state."]
6525    pub last_change_ms: u32,
6526    #[doc = "Bitmap for state of buttons."]
6527    pub state: u8,
6528}
6529impl BUTTON_CHANGE_DATA {
6530    pub const ENCODED_LEN: usize = 9usize;
6531    pub const DEFAULT: Self = Self {
6532        time_boot_ms: 0_u32,
6533        last_change_ms: 0_u32,
6534        state: 0_u8,
6535    };
6536    #[cfg(feature = "arbitrary")]
6537    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
6538        use arbitrary::{Arbitrary, Unstructured};
6539        let mut buf = [0u8; 1024];
6540        rng.fill_bytes(&mut buf);
6541        let mut unstructured = Unstructured::new(&buf);
6542        Self::arbitrary(&mut unstructured).unwrap_or_default()
6543    }
6544}
6545impl Default for BUTTON_CHANGE_DATA {
6546    fn default() -> Self {
6547        Self::DEFAULT.clone()
6548    }
6549}
6550impl MessageData for BUTTON_CHANGE_DATA {
6551    type Message = MavMessage;
6552    const ID: u32 = 257u32;
6553    const NAME: &'static str = "BUTTON_CHANGE";
6554    const EXTRA_CRC: u8 = 131u8;
6555    const ENCODED_LEN: usize = 9usize;
6556    fn deser(
6557        _version: MavlinkVersion,
6558        __input: &[u8],
6559    ) -> Result<Self, ::mavlink_core::error::ParserError> {
6560        let avail_len = __input.len();
6561        let mut payload_buf = [0; Self::ENCODED_LEN];
6562        let mut buf = if avail_len < Self::ENCODED_LEN {
6563            payload_buf[0..avail_len].copy_from_slice(__input);
6564            Bytes::new(&payload_buf)
6565        } else {
6566            Bytes::new(__input)
6567        };
6568        let mut __struct = Self::default();
6569        __struct.time_boot_ms = buf.get_u32_le();
6570        __struct.last_change_ms = buf.get_u32_le();
6571        __struct.state = buf.get_u8();
6572        Ok(__struct)
6573    }
6574    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
6575        let mut __tmp = BytesMut::new(bytes);
6576        #[allow(clippy::absurd_extreme_comparisons)]
6577        #[allow(unused_comparisons)]
6578        if __tmp.remaining() < Self::ENCODED_LEN {
6579            panic!(
6580                "buffer is too small (need {} bytes, but got {})",
6581                Self::ENCODED_LEN,
6582                __tmp.remaining(),
6583            )
6584        }
6585        __tmp.put_u32_le(self.time_boot_ms);
6586        __tmp.put_u32_le(self.last_change_ms);
6587        __tmp.put_u8(self.state);
6588        if matches!(version, MavlinkVersion::V2) {
6589            let len = __tmp.len();
6590            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
6591        } else {
6592            __tmp.len()
6593        }
6594    }
6595}
6596#[doc = "id: 262"]
6597#[doc = "Information about the status of a capture. Can be requested with a MAV_CMD_REQUEST_MESSAGE command."]
6598#[derive(Debug, Clone, PartialEq)]
6599#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
6600#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6601pub struct CAMERA_CAPTURE_STATUS_DATA {
6602    #[doc = "Timestamp (time since system boot)."]
6603    pub time_boot_ms: u32,
6604    #[doc = "Image capture interval"]
6605    pub image_interval: f32,
6606    #[doc = "Elapsed time since recording started (0: Not supported/available). A GCS should compute recording time and use non-zero values of this field to correct any discrepancy."]
6607    pub recording_time_ms: u32,
6608    #[doc = "Available storage capacity."]
6609    pub available_capacity: f32,
6610    #[doc = "Current status of image capturing (0: idle, 1: capture in progress, 2: interval set but idle, 3: interval set and capture in progress)"]
6611    pub image_status: u8,
6612    #[doc = "Current status of video capturing (0: idle, 1: capture in progress)"]
6613    pub video_status: u8,
6614    #[doc = "Total number of images captured ('forever', or until reset using MAV_CMD_STORAGE_FORMAT)."]
6615    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
6616    pub image_count: i32,
6617    #[doc = "Camera id of a non-MAVLink camera attached to an autopilot (1-6).  0 if the component is a MAVLink camera (with its own component id)."]
6618    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
6619    pub camera_device_id: u8,
6620}
6621impl CAMERA_CAPTURE_STATUS_DATA {
6622    pub const ENCODED_LEN: usize = 23usize;
6623    pub const DEFAULT: Self = Self {
6624        time_boot_ms: 0_u32,
6625        image_interval: 0.0_f32,
6626        recording_time_ms: 0_u32,
6627        available_capacity: 0.0_f32,
6628        image_status: 0_u8,
6629        video_status: 0_u8,
6630        image_count: 0_i32,
6631        camera_device_id: 0_u8,
6632    };
6633    #[cfg(feature = "arbitrary")]
6634    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
6635        use arbitrary::{Arbitrary, Unstructured};
6636        let mut buf = [0u8; 1024];
6637        rng.fill_bytes(&mut buf);
6638        let mut unstructured = Unstructured::new(&buf);
6639        Self::arbitrary(&mut unstructured).unwrap_or_default()
6640    }
6641}
6642impl Default for CAMERA_CAPTURE_STATUS_DATA {
6643    fn default() -> Self {
6644        Self::DEFAULT.clone()
6645    }
6646}
6647impl MessageData for CAMERA_CAPTURE_STATUS_DATA {
6648    type Message = MavMessage;
6649    const ID: u32 = 262u32;
6650    const NAME: &'static str = "CAMERA_CAPTURE_STATUS";
6651    const EXTRA_CRC: u8 = 12u8;
6652    const ENCODED_LEN: usize = 23usize;
6653    fn deser(
6654        _version: MavlinkVersion,
6655        __input: &[u8],
6656    ) -> Result<Self, ::mavlink_core::error::ParserError> {
6657        let avail_len = __input.len();
6658        let mut payload_buf = [0; Self::ENCODED_LEN];
6659        let mut buf = if avail_len < Self::ENCODED_LEN {
6660            payload_buf[0..avail_len].copy_from_slice(__input);
6661            Bytes::new(&payload_buf)
6662        } else {
6663            Bytes::new(__input)
6664        };
6665        let mut __struct = Self::default();
6666        __struct.time_boot_ms = buf.get_u32_le();
6667        __struct.image_interval = buf.get_f32_le();
6668        __struct.recording_time_ms = buf.get_u32_le();
6669        __struct.available_capacity = buf.get_f32_le();
6670        __struct.image_status = buf.get_u8();
6671        __struct.video_status = buf.get_u8();
6672        __struct.image_count = buf.get_i32_le();
6673        __struct.camera_device_id = buf.get_u8();
6674        Ok(__struct)
6675    }
6676    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
6677        let mut __tmp = BytesMut::new(bytes);
6678        #[allow(clippy::absurd_extreme_comparisons)]
6679        #[allow(unused_comparisons)]
6680        if __tmp.remaining() < Self::ENCODED_LEN {
6681            panic!(
6682                "buffer is too small (need {} bytes, but got {})",
6683                Self::ENCODED_LEN,
6684                __tmp.remaining(),
6685            )
6686        }
6687        __tmp.put_u32_le(self.time_boot_ms);
6688        __tmp.put_f32_le(self.image_interval);
6689        __tmp.put_u32_le(self.recording_time_ms);
6690        __tmp.put_f32_le(self.available_capacity);
6691        __tmp.put_u8(self.image_status);
6692        __tmp.put_u8(self.video_status);
6693        __tmp.put_i32_le(self.image_count);
6694        __tmp.put_u8(self.camera_device_id);
6695        if matches!(version, MavlinkVersion::V2) {
6696            let len = __tmp.len();
6697            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
6698        } else {
6699            __tmp.len()
6700        }
6701    }
6702}
6703#[doc = "id: 271"]
6704#[doc = "Information about the field of view of a camera. Can be requested with a MAV_CMD_REQUEST_MESSAGE command."]
6705#[derive(Debug, Clone, PartialEq)]
6706#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
6707#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6708pub struct CAMERA_FOV_STATUS_DATA {
6709    #[doc = "Timestamp (time since system boot)."]
6710    pub time_boot_ms: u32,
6711    #[doc = "Latitude of camera (INT32_MAX if unknown)."]
6712    pub lat_camera: i32,
6713    #[doc = "Longitude of camera (INT32_MAX if unknown)."]
6714    pub lon_camera: i32,
6715    #[doc = "Altitude (MSL) of camera (INT32_MAX if unknown)."]
6716    pub alt_camera: i32,
6717    #[doc = "Latitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon)."]
6718    pub lat_image: i32,
6719    #[doc = "Longitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon)."]
6720    pub lon_image: i32,
6721    #[doc = "Altitude (MSL) of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon)."]
6722    pub alt_image: i32,
6723    #[doc = "Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)"]
6724    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
6725    pub q: [f32; 4],
6726    #[doc = "Horizontal field of view (NaN if unknown)."]
6727    pub hfov: f32,
6728    #[doc = "Vertical field of view (NaN if unknown)."]
6729    pub vfov: f32,
6730    #[doc = "Camera id of a non-MAVLink camera attached to an autopilot (1-6).  0 if the component is a MAVLink camera (with its own component id)."]
6731    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
6732    pub camera_device_id: u8,
6733}
6734impl CAMERA_FOV_STATUS_DATA {
6735    pub const ENCODED_LEN: usize = 53usize;
6736    pub const DEFAULT: Self = Self {
6737        time_boot_ms: 0_u32,
6738        lat_camera: 0_i32,
6739        lon_camera: 0_i32,
6740        alt_camera: 0_i32,
6741        lat_image: 0_i32,
6742        lon_image: 0_i32,
6743        alt_image: 0_i32,
6744        q: [0.0_f32; 4usize],
6745        hfov: 0.0_f32,
6746        vfov: 0.0_f32,
6747        camera_device_id: 0_u8,
6748    };
6749    #[cfg(feature = "arbitrary")]
6750    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
6751        use arbitrary::{Arbitrary, Unstructured};
6752        let mut buf = [0u8; 1024];
6753        rng.fill_bytes(&mut buf);
6754        let mut unstructured = Unstructured::new(&buf);
6755        Self::arbitrary(&mut unstructured).unwrap_or_default()
6756    }
6757}
6758impl Default for CAMERA_FOV_STATUS_DATA {
6759    fn default() -> Self {
6760        Self::DEFAULT.clone()
6761    }
6762}
6763impl MessageData for CAMERA_FOV_STATUS_DATA {
6764    type Message = MavMessage;
6765    const ID: u32 = 271u32;
6766    const NAME: &'static str = "CAMERA_FOV_STATUS";
6767    const EXTRA_CRC: u8 = 22u8;
6768    const ENCODED_LEN: usize = 53usize;
6769    fn deser(
6770        _version: MavlinkVersion,
6771        __input: &[u8],
6772    ) -> Result<Self, ::mavlink_core::error::ParserError> {
6773        let avail_len = __input.len();
6774        let mut payload_buf = [0; Self::ENCODED_LEN];
6775        let mut buf = if avail_len < Self::ENCODED_LEN {
6776            payload_buf[0..avail_len].copy_from_slice(__input);
6777            Bytes::new(&payload_buf)
6778        } else {
6779            Bytes::new(__input)
6780        };
6781        let mut __struct = Self::default();
6782        __struct.time_boot_ms = buf.get_u32_le();
6783        __struct.lat_camera = buf.get_i32_le();
6784        __struct.lon_camera = buf.get_i32_le();
6785        __struct.alt_camera = buf.get_i32_le();
6786        __struct.lat_image = buf.get_i32_le();
6787        __struct.lon_image = buf.get_i32_le();
6788        __struct.alt_image = buf.get_i32_le();
6789        for v in &mut __struct.q {
6790            let val = buf.get_f32_le();
6791            *v = val;
6792        }
6793        __struct.hfov = buf.get_f32_le();
6794        __struct.vfov = buf.get_f32_le();
6795        __struct.camera_device_id = buf.get_u8();
6796        Ok(__struct)
6797    }
6798    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
6799        let mut __tmp = BytesMut::new(bytes);
6800        #[allow(clippy::absurd_extreme_comparisons)]
6801        #[allow(unused_comparisons)]
6802        if __tmp.remaining() < Self::ENCODED_LEN {
6803            panic!(
6804                "buffer is too small (need {} bytes, but got {})",
6805                Self::ENCODED_LEN,
6806                __tmp.remaining(),
6807            )
6808        }
6809        __tmp.put_u32_le(self.time_boot_ms);
6810        __tmp.put_i32_le(self.lat_camera);
6811        __tmp.put_i32_le(self.lon_camera);
6812        __tmp.put_i32_le(self.alt_camera);
6813        __tmp.put_i32_le(self.lat_image);
6814        __tmp.put_i32_le(self.lon_image);
6815        __tmp.put_i32_le(self.alt_image);
6816        for val in &self.q {
6817            __tmp.put_f32_le(*val);
6818        }
6819        __tmp.put_f32_le(self.hfov);
6820        __tmp.put_f32_le(self.vfov);
6821        __tmp.put_u8(self.camera_device_id);
6822        if matches!(version, MavlinkVersion::V2) {
6823            let len = __tmp.len();
6824            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
6825        } else {
6826            __tmp.len()
6827        }
6828    }
6829}
6830#[doc = "id: 263"]
6831#[doc = "Information about a captured image. This is emitted every time a message is captured.         MAV_CMD_REQUEST_MESSAGE can be used to (re)request this message for a specific sequence number or range of sequence numbers:         MAV_CMD_REQUEST_MESSAGE.param2 indicates the sequence number the first image to send, or set to -1 to send the message for all sequence numbers.         MAV_CMD_REQUEST_MESSAGE.param3 is used to specify a range of messages to send:         set to 0 (default) to send just the the message for the sequence number in param 2,         set to -1 to send the message for the sequence number in param 2 and all the following sequence numbers,         set to the sequence number of the final message in the range."]
6832#[derive(Debug, Clone, PartialEq)]
6833#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
6834#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6835pub struct CAMERA_IMAGE_CAPTURED_DATA {
6836    #[doc = "Timestamp (time since UNIX epoch) in UTC. 0 for unknown."]
6837    pub time_utc: u64,
6838    #[doc = "Timestamp (time since system boot)."]
6839    pub time_boot_ms: u32,
6840    #[doc = "Latitude where image was taken"]
6841    pub lat: i32,
6842    #[doc = "Longitude where capture was taken"]
6843    pub lon: i32,
6844    #[doc = "Altitude (MSL) where image was taken"]
6845    pub alt: i32,
6846    #[doc = "Altitude above ground"]
6847    pub relative_alt: i32,
6848    #[doc = "Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)"]
6849    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
6850    pub q: [f32; 4],
6851    #[doc = "Zero based index of this image (i.e. a new image will have index CAMERA_CAPTURE_STATUS.image count -1)"]
6852    pub image_index: i32,
6853    #[doc = "Camera id of a non-MAVLink camera attached to an autopilot (1-6).  0 if the component is a MAVLink camera (with its own component id). Field name is usually camera_device_id."]
6854    pub camera_id: u8,
6855    #[doc = "Boolean indicating success (1) or failure (0) while capturing this image."]
6856    pub capture_result: i8,
6857    #[doc = "URL of image taken. Either local storage or <http://foo.jpg> if camera provides an HTTP interface."]
6858    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
6859    pub file_url: [u8; 205],
6860}
6861impl CAMERA_IMAGE_CAPTURED_DATA {
6862    pub const ENCODED_LEN: usize = 255usize;
6863    pub const DEFAULT: Self = Self {
6864        time_utc: 0_u64,
6865        time_boot_ms: 0_u32,
6866        lat: 0_i32,
6867        lon: 0_i32,
6868        alt: 0_i32,
6869        relative_alt: 0_i32,
6870        q: [0.0_f32; 4usize],
6871        image_index: 0_i32,
6872        camera_id: 0_u8,
6873        capture_result: 0_i8,
6874        file_url: [0_u8; 205usize],
6875    };
6876    #[cfg(feature = "arbitrary")]
6877    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
6878        use arbitrary::{Arbitrary, Unstructured};
6879        let mut buf = [0u8; 1024];
6880        rng.fill_bytes(&mut buf);
6881        let mut unstructured = Unstructured::new(&buf);
6882        Self::arbitrary(&mut unstructured).unwrap_or_default()
6883    }
6884}
6885impl Default for CAMERA_IMAGE_CAPTURED_DATA {
6886    fn default() -> Self {
6887        Self::DEFAULT.clone()
6888    }
6889}
6890impl MessageData for CAMERA_IMAGE_CAPTURED_DATA {
6891    type Message = MavMessage;
6892    const ID: u32 = 263u32;
6893    const NAME: &'static str = "CAMERA_IMAGE_CAPTURED";
6894    const EXTRA_CRC: u8 = 133u8;
6895    const ENCODED_LEN: usize = 255usize;
6896    fn deser(
6897        _version: MavlinkVersion,
6898        __input: &[u8],
6899    ) -> Result<Self, ::mavlink_core::error::ParserError> {
6900        let avail_len = __input.len();
6901        let mut payload_buf = [0; Self::ENCODED_LEN];
6902        let mut buf = if avail_len < Self::ENCODED_LEN {
6903            payload_buf[0..avail_len].copy_from_slice(__input);
6904            Bytes::new(&payload_buf)
6905        } else {
6906            Bytes::new(__input)
6907        };
6908        let mut __struct = Self::default();
6909        __struct.time_utc = buf.get_u64_le();
6910        __struct.time_boot_ms = buf.get_u32_le();
6911        __struct.lat = buf.get_i32_le();
6912        __struct.lon = buf.get_i32_le();
6913        __struct.alt = buf.get_i32_le();
6914        __struct.relative_alt = buf.get_i32_le();
6915        for v in &mut __struct.q {
6916            let val = buf.get_f32_le();
6917            *v = val;
6918        }
6919        __struct.image_index = buf.get_i32_le();
6920        __struct.camera_id = buf.get_u8();
6921        __struct.capture_result = buf.get_i8();
6922        for v in &mut __struct.file_url {
6923            let val = buf.get_u8();
6924            *v = val;
6925        }
6926        Ok(__struct)
6927    }
6928    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
6929        let mut __tmp = BytesMut::new(bytes);
6930        #[allow(clippy::absurd_extreme_comparisons)]
6931        #[allow(unused_comparisons)]
6932        if __tmp.remaining() < Self::ENCODED_LEN {
6933            panic!(
6934                "buffer is too small (need {} bytes, but got {})",
6935                Self::ENCODED_LEN,
6936                __tmp.remaining(),
6937            )
6938        }
6939        __tmp.put_u64_le(self.time_utc);
6940        __tmp.put_u32_le(self.time_boot_ms);
6941        __tmp.put_i32_le(self.lat);
6942        __tmp.put_i32_le(self.lon);
6943        __tmp.put_i32_le(self.alt);
6944        __tmp.put_i32_le(self.relative_alt);
6945        for val in &self.q {
6946            __tmp.put_f32_le(*val);
6947        }
6948        __tmp.put_i32_le(self.image_index);
6949        __tmp.put_u8(self.camera_id);
6950        __tmp.put_i8(self.capture_result);
6951        for val in &self.file_url {
6952            __tmp.put_u8(*val);
6953        }
6954        if matches!(version, MavlinkVersion::V2) {
6955            let len = __tmp.len();
6956            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
6957        } else {
6958            __tmp.len()
6959        }
6960    }
6961}
6962#[doc = "id: 259"]
6963#[doc = "Information about a camera. Can be requested with a MAV_CMD_REQUEST_MESSAGE command."]
6964#[derive(Debug, Clone, PartialEq)]
6965#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
6966#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6967pub struct CAMERA_INFORMATION_DATA {
6968    #[doc = "Timestamp (time since system boot)."]
6969    pub time_boot_ms: u32,
6970    #[doc = "0xff). Use 0 if not known."]
6971    pub firmware_version: u32,
6972    #[doc = "Focal length. Use NaN if not known."]
6973    pub focal_length: f32,
6974    #[doc = "Image sensor size horizontal. Use NaN if not known."]
6975    pub sensor_size_h: f32,
6976    #[doc = "Image sensor size vertical. Use NaN if not known."]
6977    pub sensor_size_v: f32,
6978    #[doc = "Bitmap of camera capability flags."]
6979    pub flags: CameraCapFlags,
6980    #[doc = "Horizontal image resolution. Use 0 if not known."]
6981    pub resolution_h: u16,
6982    #[doc = "Vertical image resolution. Use 0 if not known."]
6983    pub resolution_v: u16,
6984    #[doc = "Camera definition version (iteration).  Use 0 if not known."]
6985    pub cam_definition_version: u16,
6986    #[doc = "Name of the camera vendor"]
6987    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
6988    pub vendor_name: [u8; 32],
6989    #[doc = "Name of the camera model"]
6990    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
6991    pub model_name: [u8; 32],
6992    #[doc = "Reserved for a lens ID.  Use 0 if not known."]
6993    pub lens_id: u8,
6994    #[doc = "Camera definition URI (if any, otherwise only basic functions will be available). HTTP- (http://) and MAVLink FTP- (mavlinkftp://) formatted URIs are allowed (and both must be supported by any GCS that implements the Camera Protocol). The definition file may be xz compressed, which will be indicated by the file extension .xml.xz (a GCS that implements the protocol must support decompressing the file). The string needs to be zero terminated.  Use a zero-length string if not known."]
6995    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
6996    pub cam_definition_uri: [u8; 140],
6997    #[doc = "Gimbal id of a gimbal associated with this camera. This is the component id of the gimbal device, or 1-6 for non mavlink gimbals. Use 0 if no gimbal is associated with the camera."]
6998    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
6999    pub gimbal_device_id: u8,
7000    #[doc = "Camera id of a non-MAVLink camera attached to an autopilot (1-6).  0 if the component is a MAVLink camera (with its own component id)."]
7001    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
7002    pub camera_device_id: u8,
7003}
7004impl CAMERA_INFORMATION_DATA {
7005    pub const ENCODED_LEN: usize = 237usize;
7006    pub const DEFAULT: Self = Self {
7007        time_boot_ms: 0_u32,
7008        firmware_version: 0_u32,
7009        focal_length: 0.0_f32,
7010        sensor_size_h: 0.0_f32,
7011        sensor_size_v: 0.0_f32,
7012        flags: CameraCapFlags::DEFAULT,
7013        resolution_h: 0_u16,
7014        resolution_v: 0_u16,
7015        cam_definition_version: 0_u16,
7016        vendor_name: [0_u8; 32usize],
7017        model_name: [0_u8; 32usize],
7018        lens_id: 0_u8,
7019        cam_definition_uri: [0_u8; 140usize],
7020        gimbal_device_id: 0_u8,
7021        camera_device_id: 0_u8,
7022    };
7023    #[cfg(feature = "arbitrary")]
7024    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
7025        use arbitrary::{Arbitrary, Unstructured};
7026        let mut buf = [0u8; 1024];
7027        rng.fill_bytes(&mut buf);
7028        let mut unstructured = Unstructured::new(&buf);
7029        Self::arbitrary(&mut unstructured).unwrap_or_default()
7030    }
7031}
7032impl Default for CAMERA_INFORMATION_DATA {
7033    fn default() -> Self {
7034        Self::DEFAULT.clone()
7035    }
7036}
7037impl MessageData for CAMERA_INFORMATION_DATA {
7038    type Message = MavMessage;
7039    const ID: u32 = 259u32;
7040    const NAME: &'static str = "CAMERA_INFORMATION";
7041    const EXTRA_CRC: u8 = 92u8;
7042    const ENCODED_LEN: usize = 237usize;
7043    fn deser(
7044        _version: MavlinkVersion,
7045        __input: &[u8],
7046    ) -> Result<Self, ::mavlink_core::error::ParserError> {
7047        let avail_len = __input.len();
7048        let mut payload_buf = [0; Self::ENCODED_LEN];
7049        let mut buf = if avail_len < Self::ENCODED_LEN {
7050            payload_buf[0..avail_len].copy_from_slice(__input);
7051            Bytes::new(&payload_buf)
7052        } else {
7053            Bytes::new(__input)
7054        };
7055        let mut __struct = Self::default();
7056        __struct.time_boot_ms = buf.get_u32_le();
7057        __struct.firmware_version = buf.get_u32_le();
7058        __struct.focal_length = buf.get_f32_le();
7059        __struct.sensor_size_h = buf.get_f32_le();
7060        __struct.sensor_size_v = buf.get_f32_le();
7061        let tmp = buf.get_u32_le();
7062        __struct.flags = CameraCapFlags::from_bits(tmp & CameraCapFlags::all().bits()).ok_or(
7063            ::mavlink_core::error::ParserError::InvalidFlag {
7064                flag_type: "CameraCapFlags",
7065                value: tmp as u32,
7066            },
7067        )?;
7068        __struct.resolution_h = buf.get_u16_le();
7069        __struct.resolution_v = buf.get_u16_le();
7070        __struct.cam_definition_version = buf.get_u16_le();
7071        for v in &mut __struct.vendor_name {
7072            let val = buf.get_u8();
7073            *v = val;
7074        }
7075        for v in &mut __struct.model_name {
7076            let val = buf.get_u8();
7077            *v = val;
7078        }
7079        __struct.lens_id = buf.get_u8();
7080        for v in &mut __struct.cam_definition_uri {
7081            let val = buf.get_u8();
7082            *v = val;
7083        }
7084        __struct.gimbal_device_id = buf.get_u8();
7085        __struct.camera_device_id = buf.get_u8();
7086        Ok(__struct)
7087    }
7088    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
7089        let mut __tmp = BytesMut::new(bytes);
7090        #[allow(clippy::absurd_extreme_comparisons)]
7091        #[allow(unused_comparisons)]
7092        if __tmp.remaining() < Self::ENCODED_LEN {
7093            panic!(
7094                "buffer is too small (need {} bytes, but got {})",
7095                Self::ENCODED_LEN,
7096                __tmp.remaining(),
7097            )
7098        }
7099        __tmp.put_u32_le(self.time_boot_ms);
7100        __tmp.put_u32_le(self.firmware_version);
7101        __tmp.put_f32_le(self.focal_length);
7102        __tmp.put_f32_le(self.sensor_size_h);
7103        __tmp.put_f32_le(self.sensor_size_v);
7104        __tmp.put_u32_le(self.flags.bits());
7105        __tmp.put_u16_le(self.resolution_h);
7106        __tmp.put_u16_le(self.resolution_v);
7107        __tmp.put_u16_le(self.cam_definition_version);
7108        for val in &self.vendor_name {
7109            __tmp.put_u8(*val);
7110        }
7111        for val in &self.model_name {
7112            __tmp.put_u8(*val);
7113        }
7114        __tmp.put_u8(self.lens_id);
7115        for val in &self.cam_definition_uri {
7116            __tmp.put_u8(*val);
7117        }
7118        __tmp.put_u8(self.gimbal_device_id);
7119        __tmp.put_u8(self.camera_device_id);
7120        if matches!(version, MavlinkVersion::V2) {
7121            let len = __tmp.len();
7122            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
7123        } else {
7124            __tmp.len()
7125        }
7126    }
7127}
7128#[doc = "id: 260"]
7129#[doc = "Settings of a camera. Can be requested with a MAV_CMD_REQUEST_MESSAGE command."]
7130#[derive(Debug, Clone, PartialEq)]
7131#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7132#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7133pub struct CAMERA_SETTINGS_DATA {
7134    #[doc = "Timestamp (time since system boot)."]
7135    pub time_boot_ms: u32,
7136    #[doc = "Camera mode"]
7137    pub mode_id: CameraMode,
7138    #[doc = "Current zoom level as a percentage of the full range (0.0 to 100.0, NaN if not known)"]
7139    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
7140    pub zoomLevel: f32,
7141    #[doc = "Current focus level as a percentage of the full range (0.0 to 100.0, NaN if not known)"]
7142    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
7143    pub focusLevel: f32,
7144    #[doc = "Camera id of a non-MAVLink camera attached to an autopilot (1-6).  0 if the component is a MAVLink camera (with its own component id)."]
7145    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
7146    pub camera_device_id: u8,
7147}
7148impl CAMERA_SETTINGS_DATA {
7149    pub const ENCODED_LEN: usize = 14usize;
7150    pub const DEFAULT: Self = Self {
7151        time_boot_ms: 0_u32,
7152        mode_id: CameraMode::DEFAULT,
7153        zoomLevel: 0.0_f32,
7154        focusLevel: 0.0_f32,
7155        camera_device_id: 0_u8,
7156    };
7157    #[cfg(feature = "arbitrary")]
7158    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
7159        use arbitrary::{Arbitrary, Unstructured};
7160        let mut buf = [0u8; 1024];
7161        rng.fill_bytes(&mut buf);
7162        let mut unstructured = Unstructured::new(&buf);
7163        Self::arbitrary(&mut unstructured).unwrap_or_default()
7164    }
7165}
7166impl Default for CAMERA_SETTINGS_DATA {
7167    fn default() -> Self {
7168        Self::DEFAULT.clone()
7169    }
7170}
7171impl MessageData for CAMERA_SETTINGS_DATA {
7172    type Message = MavMessage;
7173    const ID: u32 = 260u32;
7174    const NAME: &'static str = "CAMERA_SETTINGS";
7175    const EXTRA_CRC: u8 = 146u8;
7176    const ENCODED_LEN: usize = 14usize;
7177    fn deser(
7178        _version: MavlinkVersion,
7179        __input: &[u8],
7180    ) -> Result<Self, ::mavlink_core::error::ParserError> {
7181        let avail_len = __input.len();
7182        let mut payload_buf = [0; Self::ENCODED_LEN];
7183        let mut buf = if avail_len < Self::ENCODED_LEN {
7184            payload_buf[0..avail_len].copy_from_slice(__input);
7185            Bytes::new(&payload_buf)
7186        } else {
7187            Bytes::new(__input)
7188        };
7189        let mut __struct = Self::default();
7190        __struct.time_boot_ms = buf.get_u32_le();
7191        let tmp = buf.get_u8();
7192        __struct.mode_id =
7193            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
7194                enum_type: "CameraMode",
7195                value: tmp as u32,
7196            })?;
7197        __struct.zoomLevel = buf.get_f32_le();
7198        __struct.focusLevel = buf.get_f32_le();
7199        __struct.camera_device_id = buf.get_u8();
7200        Ok(__struct)
7201    }
7202    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
7203        let mut __tmp = BytesMut::new(bytes);
7204        #[allow(clippy::absurd_extreme_comparisons)]
7205        #[allow(unused_comparisons)]
7206        if __tmp.remaining() < Self::ENCODED_LEN {
7207            panic!(
7208                "buffer is too small (need {} bytes, but got {})",
7209                Self::ENCODED_LEN,
7210                __tmp.remaining(),
7211            )
7212        }
7213        __tmp.put_u32_le(self.time_boot_ms);
7214        __tmp.put_u8(self.mode_id as u8);
7215        __tmp.put_f32_le(self.zoomLevel);
7216        __tmp.put_f32_le(self.focusLevel);
7217        __tmp.put_u8(self.camera_device_id);
7218        if matches!(version, MavlinkVersion::V2) {
7219            let len = __tmp.len();
7220            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
7221        } else {
7222            __tmp.len()
7223        }
7224    }
7225}
7226#[doc = "id: 277"]
7227#[doc = "Camera absolute thermal range. This can be streamed when the associated VIDEO_STREAM_STATUS `flag` field bit VIDEO_STREAM_STATUS_FLAGS_THERMAL_RANGE_ENABLED is set, but a GCS may choose to only request it for the current active stream. Use MAV_CMD_SET_MESSAGE_INTERVAL to define message interval (param3 indicates the stream id of the current camera, or 0 for all streams, param4 indicates the target camera_device_id for autopilot-attached cameras or 0 for MAVLink cameras)."]
7228#[derive(Debug, Clone, PartialEq)]
7229#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7230#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7231pub struct CAMERA_THERMAL_RANGE_DATA {
7232    #[doc = "Timestamp (time since system boot)."]
7233    pub time_boot_ms: u32,
7234    #[doc = "Temperature max."]
7235    pub max: f32,
7236    #[doc = "Temperature max point x value (normalized 0..1, 0 is left, 1 is right), NAN if unknown."]
7237    pub max_point_x: f32,
7238    #[doc = "Temperature max point y value (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown."]
7239    pub max_point_y: f32,
7240    #[doc = "Temperature min."]
7241    pub min: f32,
7242    #[doc = "Temperature min point x value (normalized 0..1, 0 is left, 1 is right), NAN if unknown."]
7243    pub min_point_x: f32,
7244    #[doc = "Temperature min point y value (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown."]
7245    pub min_point_y: f32,
7246    #[doc = "Video Stream ID (1 for first, 2 for second, etc.)"]
7247    pub stream_id: u8,
7248    #[doc = "Camera id of a non-MAVLink camera attached to an autopilot (1-6).  0 if the component is a MAVLink camera (with its own component id)."]
7249    pub camera_device_id: u8,
7250}
7251impl CAMERA_THERMAL_RANGE_DATA {
7252    pub const ENCODED_LEN: usize = 30usize;
7253    pub const DEFAULT: Self = Self {
7254        time_boot_ms: 0_u32,
7255        max: 0.0_f32,
7256        max_point_x: 0.0_f32,
7257        max_point_y: 0.0_f32,
7258        min: 0.0_f32,
7259        min_point_x: 0.0_f32,
7260        min_point_y: 0.0_f32,
7261        stream_id: 0_u8,
7262        camera_device_id: 0_u8,
7263    };
7264    #[cfg(feature = "arbitrary")]
7265    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
7266        use arbitrary::{Arbitrary, Unstructured};
7267        let mut buf = [0u8; 1024];
7268        rng.fill_bytes(&mut buf);
7269        let mut unstructured = Unstructured::new(&buf);
7270        Self::arbitrary(&mut unstructured).unwrap_or_default()
7271    }
7272}
7273impl Default for CAMERA_THERMAL_RANGE_DATA {
7274    fn default() -> Self {
7275        Self::DEFAULT.clone()
7276    }
7277}
7278impl MessageData for CAMERA_THERMAL_RANGE_DATA {
7279    type Message = MavMessage;
7280    const ID: u32 = 277u32;
7281    const NAME: &'static str = "CAMERA_THERMAL_RANGE";
7282    const EXTRA_CRC: u8 = 62u8;
7283    const ENCODED_LEN: usize = 30usize;
7284    fn deser(
7285        _version: MavlinkVersion,
7286        __input: &[u8],
7287    ) -> Result<Self, ::mavlink_core::error::ParserError> {
7288        let avail_len = __input.len();
7289        let mut payload_buf = [0; Self::ENCODED_LEN];
7290        let mut buf = if avail_len < Self::ENCODED_LEN {
7291            payload_buf[0..avail_len].copy_from_slice(__input);
7292            Bytes::new(&payload_buf)
7293        } else {
7294            Bytes::new(__input)
7295        };
7296        let mut __struct = Self::default();
7297        __struct.time_boot_ms = buf.get_u32_le();
7298        __struct.max = buf.get_f32_le();
7299        __struct.max_point_x = buf.get_f32_le();
7300        __struct.max_point_y = buf.get_f32_le();
7301        __struct.min = buf.get_f32_le();
7302        __struct.min_point_x = buf.get_f32_le();
7303        __struct.min_point_y = buf.get_f32_le();
7304        __struct.stream_id = buf.get_u8();
7305        __struct.camera_device_id = buf.get_u8();
7306        Ok(__struct)
7307    }
7308    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
7309        let mut __tmp = BytesMut::new(bytes);
7310        #[allow(clippy::absurd_extreme_comparisons)]
7311        #[allow(unused_comparisons)]
7312        if __tmp.remaining() < Self::ENCODED_LEN {
7313            panic!(
7314                "buffer is too small (need {} bytes, but got {})",
7315                Self::ENCODED_LEN,
7316                __tmp.remaining(),
7317            )
7318        }
7319        __tmp.put_u32_le(self.time_boot_ms);
7320        __tmp.put_f32_le(self.max);
7321        __tmp.put_f32_le(self.max_point_x);
7322        __tmp.put_f32_le(self.max_point_y);
7323        __tmp.put_f32_le(self.min);
7324        __tmp.put_f32_le(self.min_point_x);
7325        __tmp.put_f32_le(self.min_point_y);
7326        __tmp.put_u8(self.stream_id);
7327        __tmp.put_u8(self.camera_device_id);
7328        if matches!(version, MavlinkVersion::V2) {
7329            let len = __tmp.len();
7330            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
7331        } else {
7332            __tmp.len()
7333        }
7334    }
7335}
7336#[doc = "id: 276"]
7337#[doc = "Camera tracking status, sent while in active tracking. Use MAV_CMD_SET_MESSAGE_INTERVAL to define message interval."]
7338#[derive(Debug, Clone, PartialEq)]
7339#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7340#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7341pub struct CAMERA_TRACKING_GEO_STATUS_DATA {
7342    #[doc = "Latitude of tracked object"]
7343    pub lat: i32,
7344    #[doc = "Longitude of tracked object"]
7345    pub lon: i32,
7346    #[doc = "Altitude of tracked object(AMSL, WGS84)"]
7347    pub alt: f32,
7348    #[doc = "Horizontal accuracy. NAN if unknown"]
7349    pub h_acc: f32,
7350    #[doc = "Vertical accuracy. NAN if unknown"]
7351    pub v_acc: f32,
7352    #[doc = "North velocity of tracked object. NAN if unknown"]
7353    pub vel_n: f32,
7354    #[doc = "East velocity of tracked object. NAN if unknown"]
7355    pub vel_e: f32,
7356    #[doc = "Down velocity of tracked object. NAN if unknown"]
7357    pub vel_d: f32,
7358    #[doc = "Velocity accuracy. NAN if unknown"]
7359    pub vel_acc: f32,
7360    #[doc = "Distance between camera and tracked object. NAN if unknown"]
7361    pub dist: f32,
7362    #[doc = "Heading in radians, in NED. NAN if unknown"]
7363    pub hdg: f32,
7364    #[doc = "Accuracy of heading, in NED. NAN if unknown"]
7365    pub hdg_acc: f32,
7366    #[doc = "Current tracking status"]
7367    pub tracking_status: CameraTrackingStatusFlags,
7368    #[doc = "Camera id of a non-MAVLink camera attached to an autopilot (1-6).  0 if the component is a MAVLink camera (with its own component id)."]
7369    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
7370    pub camera_device_id: u8,
7371}
7372impl CAMERA_TRACKING_GEO_STATUS_DATA {
7373    pub const ENCODED_LEN: usize = 50usize;
7374    pub const DEFAULT: Self = Self {
7375        lat: 0_i32,
7376        lon: 0_i32,
7377        alt: 0.0_f32,
7378        h_acc: 0.0_f32,
7379        v_acc: 0.0_f32,
7380        vel_n: 0.0_f32,
7381        vel_e: 0.0_f32,
7382        vel_d: 0.0_f32,
7383        vel_acc: 0.0_f32,
7384        dist: 0.0_f32,
7385        hdg: 0.0_f32,
7386        hdg_acc: 0.0_f32,
7387        tracking_status: CameraTrackingStatusFlags::DEFAULT,
7388        camera_device_id: 0_u8,
7389    };
7390    #[cfg(feature = "arbitrary")]
7391    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
7392        use arbitrary::{Arbitrary, Unstructured};
7393        let mut buf = [0u8; 1024];
7394        rng.fill_bytes(&mut buf);
7395        let mut unstructured = Unstructured::new(&buf);
7396        Self::arbitrary(&mut unstructured).unwrap_or_default()
7397    }
7398}
7399impl Default for CAMERA_TRACKING_GEO_STATUS_DATA {
7400    fn default() -> Self {
7401        Self::DEFAULT.clone()
7402    }
7403}
7404impl MessageData for CAMERA_TRACKING_GEO_STATUS_DATA {
7405    type Message = MavMessage;
7406    const ID: u32 = 276u32;
7407    const NAME: &'static str = "CAMERA_TRACKING_GEO_STATUS";
7408    const EXTRA_CRC: u8 = 18u8;
7409    const ENCODED_LEN: usize = 50usize;
7410    fn deser(
7411        _version: MavlinkVersion,
7412        __input: &[u8],
7413    ) -> Result<Self, ::mavlink_core::error::ParserError> {
7414        let avail_len = __input.len();
7415        let mut payload_buf = [0; Self::ENCODED_LEN];
7416        let mut buf = if avail_len < Self::ENCODED_LEN {
7417            payload_buf[0..avail_len].copy_from_slice(__input);
7418            Bytes::new(&payload_buf)
7419        } else {
7420            Bytes::new(__input)
7421        };
7422        let mut __struct = Self::default();
7423        __struct.lat = buf.get_i32_le();
7424        __struct.lon = buf.get_i32_le();
7425        __struct.alt = buf.get_f32_le();
7426        __struct.h_acc = buf.get_f32_le();
7427        __struct.v_acc = buf.get_f32_le();
7428        __struct.vel_n = buf.get_f32_le();
7429        __struct.vel_e = buf.get_f32_le();
7430        __struct.vel_d = buf.get_f32_le();
7431        __struct.vel_acc = buf.get_f32_le();
7432        __struct.dist = buf.get_f32_le();
7433        __struct.hdg = buf.get_f32_le();
7434        __struct.hdg_acc = buf.get_f32_le();
7435        let tmp = buf.get_u8();
7436        __struct.tracking_status =
7437            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
7438                enum_type: "CameraTrackingStatusFlags",
7439                value: tmp as u32,
7440            })?;
7441        __struct.camera_device_id = buf.get_u8();
7442        Ok(__struct)
7443    }
7444    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
7445        let mut __tmp = BytesMut::new(bytes);
7446        #[allow(clippy::absurd_extreme_comparisons)]
7447        #[allow(unused_comparisons)]
7448        if __tmp.remaining() < Self::ENCODED_LEN {
7449            panic!(
7450                "buffer is too small (need {} bytes, but got {})",
7451                Self::ENCODED_LEN,
7452                __tmp.remaining(),
7453            )
7454        }
7455        __tmp.put_i32_le(self.lat);
7456        __tmp.put_i32_le(self.lon);
7457        __tmp.put_f32_le(self.alt);
7458        __tmp.put_f32_le(self.h_acc);
7459        __tmp.put_f32_le(self.v_acc);
7460        __tmp.put_f32_le(self.vel_n);
7461        __tmp.put_f32_le(self.vel_e);
7462        __tmp.put_f32_le(self.vel_d);
7463        __tmp.put_f32_le(self.vel_acc);
7464        __tmp.put_f32_le(self.dist);
7465        __tmp.put_f32_le(self.hdg);
7466        __tmp.put_f32_le(self.hdg_acc);
7467        __tmp.put_u8(self.tracking_status as u8);
7468        __tmp.put_u8(self.camera_device_id);
7469        if matches!(version, MavlinkVersion::V2) {
7470            let len = __tmp.len();
7471            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
7472        } else {
7473            __tmp.len()
7474        }
7475    }
7476}
7477#[doc = "id: 275"]
7478#[doc = "Camera tracking status, sent while in active tracking. Use MAV_CMD_SET_MESSAGE_INTERVAL to define message interval."]
7479#[derive(Debug, Clone, PartialEq)]
7480#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7481#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7482pub struct CAMERA_TRACKING_IMAGE_STATUS_DATA {
7483    #[doc = "Current tracked point x value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is left, 1 is right), NAN if unknown"]
7484    pub point_x: f32,
7485    #[doc = "Current tracked point y value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown"]
7486    pub point_y: f32,
7487    #[doc = "Current tracked radius if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is image left, 1 is image right), NAN if unknown"]
7488    pub radius: f32,
7489    #[doc = "Current tracked rectangle top x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown"]
7490    pub rec_top_x: f32,
7491    #[doc = "Current tracked rectangle top y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown"]
7492    pub rec_top_y: f32,
7493    #[doc = "Current tracked rectangle bottom x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown"]
7494    pub rec_bottom_x: f32,
7495    #[doc = "Current tracked rectangle bottom y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown"]
7496    pub rec_bottom_y: f32,
7497    #[doc = "Current tracking status"]
7498    pub tracking_status: CameraTrackingStatusFlags,
7499    #[doc = "Current tracking mode"]
7500    pub tracking_mode: CameraTrackingMode,
7501    #[doc = "Defines location of target data"]
7502    pub target_data: CameraTrackingTargetData,
7503    #[doc = "Camera id of a non-MAVLink camera attached to an autopilot (1-6).  0 if the component is a MAVLink camera (with its own component id)."]
7504    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
7505    pub camera_device_id: u8,
7506}
7507impl CAMERA_TRACKING_IMAGE_STATUS_DATA {
7508    pub const ENCODED_LEN: usize = 32usize;
7509    pub const DEFAULT: Self = Self {
7510        point_x: 0.0_f32,
7511        point_y: 0.0_f32,
7512        radius: 0.0_f32,
7513        rec_top_x: 0.0_f32,
7514        rec_top_y: 0.0_f32,
7515        rec_bottom_x: 0.0_f32,
7516        rec_bottom_y: 0.0_f32,
7517        tracking_status: CameraTrackingStatusFlags::DEFAULT,
7518        tracking_mode: CameraTrackingMode::DEFAULT,
7519        target_data: CameraTrackingTargetData::DEFAULT,
7520        camera_device_id: 0_u8,
7521    };
7522    #[cfg(feature = "arbitrary")]
7523    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
7524        use arbitrary::{Arbitrary, Unstructured};
7525        let mut buf = [0u8; 1024];
7526        rng.fill_bytes(&mut buf);
7527        let mut unstructured = Unstructured::new(&buf);
7528        Self::arbitrary(&mut unstructured).unwrap_or_default()
7529    }
7530}
7531impl Default for CAMERA_TRACKING_IMAGE_STATUS_DATA {
7532    fn default() -> Self {
7533        Self::DEFAULT.clone()
7534    }
7535}
7536impl MessageData for CAMERA_TRACKING_IMAGE_STATUS_DATA {
7537    type Message = MavMessage;
7538    const ID: u32 = 275u32;
7539    const NAME: &'static str = "CAMERA_TRACKING_IMAGE_STATUS";
7540    const EXTRA_CRC: u8 = 126u8;
7541    const ENCODED_LEN: usize = 32usize;
7542    fn deser(
7543        _version: MavlinkVersion,
7544        __input: &[u8],
7545    ) -> Result<Self, ::mavlink_core::error::ParserError> {
7546        let avail_len = __input.len();
7547        let mut payload_buf = [0; Self::ENCODED_LEN];
7548        let mut buf = if avail_len < Self::ENCODED_LEN {
7549            payload_buf[0..avail_len].copy_from_slice(__input);
7550            Bytes::new(&payload_buf)
7551        } else {
7552            Bytes::new(__input)
7553        };
7554        let mut __struct = Self::default();
7555        __struct.point_x = buf.get_f32_le();
7556        __struct.point_y = buf.get_f32_le();
7557        __struct.radius = buf.get_f32_le();
7558        __struct.rec_top_x = buf.get_f32_le();
7559        __struct.rec_top_y = buf.get_f32_le();
7560        __struct.rec_bottom_x = buf.get_f32_le();
7561        __struct.rec_bottom_y = buf.get_f32_le();
7562        let tmp = buf.get_u8();
7563        __struct.tracking_status =
7564            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
7565                enum_type: "CameraTrackingStatusFlags",
7566                value: tmp as u32,
7567            })?;
7568        let tmp = buf.get_u8();
7569        __struct.tracking_mode =
7570            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
7571                enum_type: "CameraTrackingMode",
7572                value: tmp as u32,
7573            })?;
7574        let tmp = buf.get_u8();
7575        __struct.target_data =
7576            CameraTrackingTargetData::from_bits(tmp & CameraTrackingTargetData::all().bits())
7577                .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
7578                    flag_type: "CameraTrackingTargetData",
7579                    value: tmp as u32,
7580                })?;
7581        __struct.camera_device_id = buf.get_u8();
7582        Ok(__struct)
7583    }
7584    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
7585        let mut __tmp = BytesMut::new(bytes);
7586        #[allow(clippy::absurd_extreme_comparisons)]
7587        #[allow(unused_comparisons)]
7588        if __tmp.remaining() < Self::ENCODED_LEN {
7589            panic!(
7590                "buffer is too small (need {} bytes, but got {})",
7591                Self::ENCODED_LEN,
7592                __tmp.remaining(),
7593            )
7594        }
7595        __tmp.put_f32_le(self.point_x);
7596        __tmp.put_f32_le(self.point_y);
7597        __tmp.put_f32_le(self.radius);
7598        __tmp.put_f32_le(self.rec_top_x);
7599        __tmp.put_f32_le(self.rec_top_y);
7600        __tmp.put_f32_le(self.rec_bottom_x);
7601        __tmp.put_f32_le(self.rec_bottom_y);
7602        __tmp.put_u8(self.tracking_status as u8);
7603        __tmp.put_u8(self.tracking_mode as u8);
7604        __tmp.put_u8(self.target_data.bits());
7605        __tmp.put_u8(self.camera_device_id);
7606        if matches!(version, MavlinkVersion::V2) {
7607            let len = __tmp.len();
7608            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
7609        } else {
7610            __tmp.len()
7611        }
7612    }
7613}
7614#[doc = "id: 112"]
7615#[doc = "Camera-IMU triggering and synchronisation message."]
7616#[derive(Debug, Clone, PartialEq)]
7617#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7618#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7619pub struct CAMERA_TRIGGER_DATA {
7620    #[doc = "Timestamp for image frame (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
7621    pub time_usec: u64,
7622    #[doc = "Image frame sequence"]
7623    pub seq: u32,
7624}
7625impl CAMERA_TRIGGER_DATA {
7626    pub const ENCODED_LEN: usize = 12usize;
7627    pub const DEFAULT: Self = Self {
7628        time_usec: 0_u64,
7629        seq: 0_u32,
7630    };
7631    #[cfg(feature = "arbitrary")]
7632    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
7633        use arbitrary::{Arbitrary, Unstructured};
7634        let mut buf = [0u8; 1024];
7635        rng.fill_bytes(&mut buf);
7636        let mut unstructured = Unstructured::new(&buf);
7637        Self::arbitrary(&mut unstructured).unwrap_or_default()
7638    }
7639}
7640impl Default for CAMERA_TRIGGER_DATA {
7641    fn default() -> Self {
7642        Self::DEFAULT.clone()
7643    }
7644}
7645impl MessageData for CAMERA_TRIGGER_DATA {
7646    type Message = MavMessage;
7647    const ID: u32 = 112u32;
7648    const NAME: &'static str = "CAMERA_TRIGGER";
7649    const EXTRA_CRC: u8 = 174u8;
7650    const ENCODED_LEN: usize = 12usize;
7651    fn deser(
7652        _version: MavlinkVersion,
7653        __input: &[u8],
7654    ) -> Result<Self, ::mavlink_core::error::ParserError> {
7655        let avail_len = __input.len();
7656        let mut payload_buf = [0; Self::ENCODED_LEN];
7657        let mut buf = if avail_len < Self::ENCODED_LEN {
7658            payload_buf[0..avail_len].copy_from_slice(__input);
7659            Bytes::new(&payload_buf)
7660        } else {
7661            Bytes::new(__input)
7662        };
7663        let mut __struct = Self::default();
7664        __struct.time_usec = buf.get_u64_le();
7665        __struct.seq = buf.get_u32_le();
7666        Ok(__struct)
7667    }
7668    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
7669        let mut __tmp = BytesMut::new(bytes);
7670        #[allow(clippy::absurd_extreme_comparisons)]
7671        #[allow(unused_comparisons)]
7672        if __tmp.remaining() < Self::ENCODED_LEN {
7673            panic!(
7674                "buffer is too small (need {} bytes, but got {})",
7675                Self::ENCODED_LEN,
7676                __tmp.remaining(),
7677            )
7678        }
7679        __tmp.put_u64_le(self.time_usec);
7680        __tmp.put_u32_le(self.seq);
7681        if matches!(version, MavlinkVersion::V2) {
7682            let len = __tmp.len();
7683            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
7684        } else {
7685            __tmp.len()
7686        }
7687    }
7688}
7689#[doc = "id: 387"]
7690#[doc = "A forwarded CANFD frame as requested by MAV_CMD_CAN_FORWARD. These are separated from CAN_FRAME as they need different handling (eg. TAO handling)."]
7691#[derive(Debug, Clone, PartialEq)]
7692#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7693#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7694pub struct CANFD_FRAME_DATA {
7695    #[doc = "Frame ID"]
7696    pub id: u32,
7697    #[doc = "System ID."]
7698    pub target_system: u8,
7699    #[doc = "Component ID."]
7700    pub target_component: u8,
7701    #[doc = "bus number"]
7702    pub bus: u8,
7703    #[doc = "Frame length"]
7704    pub len: u8,
7705    #[doc = "Frame data"]
7706    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
7707    pub data: [u8; 64],
7708}
7709impl CANFD_FRAME_DATA {
7710    pub const ENCODED_LEN: usize = 72usize;
7711    pub const DEFAULT: Self = Self {
7712        id: 0_u32,
7713        target_system: 0_u8,
7714        target_component: 0_u8,
7715        bus: 0_u8,
7716        len: 0_u8,
7717        data: [0_u8; 64usize],
7718    };
7719    #[cfg(feature = "arbitrary")]
7720    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
7721        use arbitrary::{Arbitrary, Unstructured};
7722        let mut buf = [0u8; 1024];
7723        rng.fill_bytes(&mut buf);
7724        let mut unstructured = Unstructured::new(&buf);
7725        Self::arbitrary(&mut unstructured).unwrap_or_default()
7726    }
7727}
7728impl Default for CANFD_FRAME_DATA {
7729    fn default() -> Self {
7730        Self::DEFAULT.clone()
7731    }
7732}
7733impl MessageData for CANFD_FRAME_DATA {
7734    type Message = MavMessage;
7735    const ID: u32 = 387u32;
7736    const NAME: &'static str = "CANFD_FRAME";
7737    const EXTRA_CRC: u8 = 4u8;
7738    const ENCODED_LEN: usize = 72usize;
7739    fn deser(
7740        _version: MavlinkVersion,
7741        __input: &[u8],
7742    ) -> Result<Self, ::mavlink_core::error::ParserError> {
7743        let avail_len = __input.len();
7744        let mut payload_buf = [0; Self::ENCODED_LEN];
7745        let mut buf = if avail_len < Self::ENCODED_LEN {
7746            payload_buf[0..avail_len].copy_from_slice(__input);
7747            Bytes::new(&payload_buf)
7748        } else {
7749            Bytes::new(__input)
7750        };
7751        let mut __struct = Self::default();
7752        __struct.id = buf.get_u32_le();
7753        __struct.target_system = buf.get_u8();
7754        __struct.target_component = buf.get_u8();
7755        __struct.bus = buf.get_u8();
7756        __struct.len = buf.get_u8();
7757        for v in &mut __struct.data {
7758            let val = buf.get_u8();
7759            *v = val;
7760        }
7761        Ok(__struct)
7762    }
7763    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
7764        let mut __tmp = BytesMut::new(bytes);
7765        #[allow(clippy::absurd_extreme_comparisons)]
7766        #[allow(unused_comparisons)]
7767        if __tmp.remaining() < Self::ENCODED_LEN {
7768            panic!(
7769                "buffer is too small (need {} bytes, but got {})",
7770                Self::ENCODED_LEN,
7771                __tmp.remaining(),
7772            )
7773        }
7774        __tmp.put_u32_le(self.id);
7775        __tmp.put_u8(self.target_system);
7776        __tmp.put_u8(self.target_component);
7777        __tmp.put_u8(self.bus);
7778        __tmp.put_u8(self.len);
7779        for val in &self.data {
7780            __tmp.put_u8(*val);
7781        }
7782        if matches!(version, MavlinkVersion::V2) {
7783            let len = __tmp.len();
7784            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
7785        } else {
7786            __tmp.len()
7787        }
7788    }
7789}
7790#[doc = "id: 388"]
7791#[doc = "Modify the filter of what CAN messages to forward over the mavlink. This can be used to make CAN forwarding work well on low bandwidth links. The filtering is applied on bits 8 to 24 of the CAN id (2nd and 3rd bytes) which corresponds to the DroneCAN message ID for DroneCAN. Filters with more than 16 IDs can be constructed by sending multiple CAN_FILTER_MODIFY messages."]
7792#[derive(Debug, Clone, PartialEq)]
7793#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7794#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7795pub struct CAN_FILTER_MODIFY_DATA {
7796    #[doc = "filter IDs, length num_ids"]
7797    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
7798    pub ids: [u16; 16],
7799    #[doc = "System ID."]
7800    pub target_system: u8,
7801    #[doc = "Component ID."]
7802    pub target_component: u8,
7803    #[doc = "bus number"]
7804    pub bus: u8,
7805    #[doc = "what operation to perform on the filter list. See CAN_FILTER_OP enum."]
7806    pub operation: CanFilterOp,
7807    #[doc = "number of IDs in filter list"]
7808    pub num_ids: u8,
7809}
7810impl CAN_FILTER_MODIFY_DATA {
7811    pub const ENCODED_LEN: usize = 37usize;
7812    pub const DEFAULT: Self = Self {
7813        ids: [0_u16; 16usize],
7814        target_system: 0_u8,
7815        target_component: 0_u8,
7816        bus: 0_u8,
7817        operation: CanFilterOp::DEFAULT,
7818        num_ids: 0_u8,
7819    };
7820    #[cfg(feature = "arbitrary")]
7821    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
7822        use arbitrary::{Arbitrary, Unstructured};
7823        let mut buf = [0u8; 1024];
7824        rng.fill_bytes(&mut buf);
7825        let mut unstructured = Unstructured::new(&buf);
7826        Self::arbitrary(&mut unstructured).unwrap_or_default()
7827    }
7828}
7829impl Default for CAN_FILTER_MODIFY_DATA {
7830    fn default() -> Self {
7831        Self::DEFAULT.clone()
7832    }
7833}
7834impl MessageData for CAN_FILTER_MODIFY_DATA {
7835    type Message = MavMessage;
7836    const ID: u32 = 388u32;
7837    const NAME: &'static str = "CAN_FILTER_MODIFY";
7838    const EXTRA_CRC: u8 = 8u8;
7839    const ENCODED_LEN: usize = 37usize;
7840    fn deser(
7841        _version: MavlinkVersion,
7842        __input: &[u8],
7843    ) -> Result<Self, ::mavlink_core::error::ParserError> {
7844        let avail_len = __input.len();
7845        let mut payload_buf = [0; Self::ENCODED_LEN];
7846        let mut buf = if avail_len < Self::ENCODED_LEN {
7847            payload_buf[0..avail_len].copy_from_slice(__input);
7848            Bytes::new(&payload_buf)
7849        } else {
7850            Bytes::new(__input)
7851        };
7852        let mut __struct = Self::default();
7853        for v in &mut __struct.ids {
7854            let val = buf.get_u16_le();
7855            *v = val;
7856        }
7857        __struct.target_system = buf.get_u8();
7858        __struct.target_component = buf.get_u8();
7859        __struct.bus = buf.get_u8();
7860        let tmp = buf.get_u8();
7861        __struct.operation =
7862            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
7863                enum_type: "CanFilterOp",
7864                value: tmp as u32,
7865            })?;
7866        __struct.num_ids = buf.get_u8();
7867        Ok(__struct)
7868    }
7869    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
7870        let mut __tmp = BytesMut::new(bytes);
7871        #[allow(clippy::absurd_extreme_comparisons)]
7872        #[allow(unused_comparisons)]
7873        if __tmp.remaining() < Self::ENCODED_LEN {
7874            panic!(
7875                "buffer is too small (need {} bytes, but got {})",
7876                Self::ENCODED_LEN,
7877                __tmp.remaining(),
7878            )
7879        }
7880        for val in &self.ids {
7881            __tmp.put_u16_le(*val);
7882        }
7883        __tmp.put_u8(self.target_system);
7884        __tmp.put_u8(self.target_component);
7885        __tmp.put_u8(self.bus);
7886        __tmp.put_u8(self.operation as u8);
7887        __tmp.put_u8(self.num_ids);
7888        if matches!(version, MavlinkVersion::V2) {
7889            let len = __tmp.len();
7890            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
7891        } else {
7892            __tmp.len()
7893        }
7894    }
7895}
7896#[doc = "id: 386"]
7897#[doc = "A forwarded CAN frame as requested by MAV_CMD_CAN_FORWARD."]
7898#[derive(Debug, Clone, PartialEq)]
7899#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7900#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7901pub struct CAN_FRAME_DATA {
7902    #[doc = "Frame ID"]
7903    pub id: u32,
7904    #[doc = "System ID."]
7905    pub target_system: u8,
7906    #[doc = "Component ID."]
7907    pub target_component: u8,
7908    #[doc = "Bus number"]
7909    pub bus: u8,
7910    #[doc = "Frame length"]
7911    pub len: u8,
7912    #[doc = "Frame data"]
7913    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
7914    pub data: [u8; 8],
7915}
7916impl CAN_FRAME_DATA {
7917    pub const ENCODED_LEN: usize = 16usize;
7918    pub const DEFAULT: Self = Self {
7919        id: 0_u32,
7920        target_system: 0_u8,
7921        target_component: 0_u8,
7922        bus: 0_u8,
7923        len: 0_u8,
7924        data: [0_u8; 8usize],
7925    };
7926    #[cfg(feature = "arbitrary")]
7927    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
7928        use arbitrary::{Arbitrary, Unstructured};
7929        let mut buf = [0u8; 1024];
7930        rng.fill_bytes(&mut buf);
7931        let mut unstructured = Unstructured::new(&buf);
7932        Self::arbitrary(&mut unstructured).unwrap_or_default()
7933    }
7934}
7935impl Default for CAN_FRAME_DATA {
7936    fn default() -> Self {
7937        Self::DEFAULT.clone()
7938    }
7939}
7940impl MessageData for CAN_FRAME_DATA {
7941    type Message = MavMessage;
7942    const ID: u32 = 386u32;
7943    const NAME: &'static str = "CAN_FRAME";
7944    const EXTRA_CRC: u8 = 132u8;
7945    const ENCODED_LEN: usize = 16usize;
7946    fn deser(
7947        _version: MavlinkVersion,
7948        __input: &[u8],
7949    ) -> Result<Self, ::mavlink_core::error::ParserError> {
7950        let avail_len = __input.len();
7951        let mut payload_buf = [0; Self::ENCODED_LEN];
7952        let mut buf = if avail_len < Self::ENCODED_LEN {
7953            payload_buf[0..avail_len].copy_from_slice(__input);
7954            Bytes::new(&payload_buf)
7955        } else {
7956            Bytes::new(__input)
7957        };
7958        let mut __struct = Self::default();
7959        __struct.id = buf.get_u32_le();
7960        __struct.target_system = buf.get_u8();
7961        __struct.target_component = buf.get_u8();
7962        __struct.bus = buf.get_u8();
7963        __struct.len = buf.get_u8();
7964        for v in &mut __struct.data {
7965            let val = buf.get_u8();
7966            *v = val;
7967        }
7968        Ok(__struct)
7969    }
7970    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
7971        let mut __tmp = BytesMut::new(bytes);
7972        #[allow(clippy::absurd_extreme_comparisons)]
7973        #[allow(unused_comparisons)]
7974        if __tmp.remaining() < Self::ENCODED_LEN {
7975            panic!(
7976                "buffer is too small (need {} bytes, but got {})",
7977                Self::ENCODED_LEN,
7978                __tmp.remaining(),
7979            )
7980        }
7981        __tmp.put_u32_le(self.id);
7982        __tmp.put_u8(self.target_system);
7983        __tmp.put_u8(self.target_component);
7984        __tmp.put_u8(self.bus);
7985        __tmp.put_u8(self.len);
7986        for val in &self.data {
7987            __tmp.put_u8(*val);
7988        }
7989        if matches!(version, MavlinkVersion::V2) {
7990            let len = __tmp.len();
7991            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
7992        } else {
7993            __tmp.len()
7994        }
7995    }
7996}
7997#[doc = "id: 336"]
7998#[doc = "Configure cellular modems.         This message is re-emitted as an acknowledgement by the modem.         The message may also be explicitly requested using MAV_CMD_REQUEST_MESSAGE."]
7999#[derive(Debug, Clone, PartialEq)]
8000#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8001#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8002pub struct CELLULAR_CONFIG_DATA {
8003    #[doc = "Enable/disable LTE. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response."]
8004    pub enable_lte: u8,
8005    #[doc = "Enable/disable PIN on the SIM card. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response."]
8006    pub enable_pin: u8,
8007    #[doc = "PIN sent to the SIM card. Blank when PIN is disabled. Empty when message is sent back as a response."]
8008    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
8009    pub pin: [u8; 16],
8010    #[doc = "New PIN when changing the PIN. Blank to leave it unchanged. Empty when message is sent back as a response."]
8011    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
8012    pub new_pin: [u8; 16],
8013    #[doc = "Name of the cellular APN. Blank to leave it unchanged. Current APN when sent back as a response."]
8014    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
8015    pub apn: [u8; 32],
8016    #[doc = "Required PUK code in case the user failed to authenticate 3 times with the PIN. Empty when message is sent back as a response."]
8017    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
8018    pub puk: [u8; 16],
8019    #[doc = "Enable/disable roaming. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response."]
8020    pub roaming: u8,
8021    #[doc = "Message acceptance response (sent back to GS)."]
8022    pub response: CellularConfigResponse,
8023}
8024impl CELLULAR_CONFIG_DATA {
8025    pub const ENCODED_LEN: usize = 84usize;
8026    pub const DEFAULT: Self = Self {
8027        enable_lte: 0_u8,
8028        enable_pin: 0_u8,
8029        pin: [0_u8; 16usize],
8030        new_pin: [0_u8; 16usize],
8031        apn: [0_u8; 32usize],
8032        puk: [0_u8; 16usize],
8033        roaming: 0_u8,
8034        response: CellularConfigResponse::DEFAULT,
8035    };
8036    #[cfg(feature = "arbitrary")]
8037    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
8038        use arbitrary::{Arbitrary, Unstructured};
8039        let mut buf = [0u8; 1024];
8040        rng.fill_bytes(&mut buf);
8041        let mut unstructured = Unstructured::new(&buf);
8042        Self::arbitrary(&mut unstructured).unwrap_or_default()
8043    }
8044}
8045impl Default for CELLULAR_CONFIG_DATA {
8046    fn default() -> Self {
8047        Self::DEFAULT.clone()
8048    }
8049}
8050impl MessageData for CELLULAR_CONFIG_DATA {
8051    type Message = MavMessage;
8052    const ID: u32 = 336u32;
8053    const NAME: &'static str = "CELLULAR_CONFIG";
8054    const EXTRA_CRC: u8 = 245u8;
8055    const ENCODED_LEN: usize = 84usize;
8056    fn deser(
8057        _version: MavlinkVersion,
8058        __input: &[u8],
8059    ) -> Result<Self, ::mavlink_core::error::ParserError> {
8060        let avail_len = __input.len();
8061        let mut payload_buf = [0; Self::ENCODED_LEN];
8062        let mut buf = if avail_len < Self::ENCODED_LEN {
8063            payload_buf[0..avail_len].copy_from_slice(__input);
8064            Bytes::new(&payload_buf)
8065        } else {
8066            Bytes::new(__input)
8067        };
8068        let mut __struct = Self::default();
8069        __struct.enable_lte = buf.get_u8();
8070        __struct.enable_pin = buf.get_u8();
8071        for v in &mut __struct.pin {
8072            let val = buf.get_u8();
8073            *v = val;
8074        }
8075        for v in &mut __struct.new_pin {
8076            let val = buf.get_u8();
8077            *v = val;
8078        }
8079        for v in &mut __struct.apn {
8080            let val = buf.get_u8();
8081            *v = val;
8082        }
8083        for v in &mut __struct.puk {
8084            let val = buf.get_u8();
8085            *v = val;
8086        }
8087        __struct.roaming = buf.get_u8();
8088        let tmp = buf.get_u8();
8089        __struct.response =
8090            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
8091                enum_type: "CellularConfigResponse",
8092                value: tmp as u32,
8093            })?;
8094        Ok(__struct)
8095    }
8096    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
8097        let mut __tmp = BytesMut::new(bytes);
8098        #[allow(clippy::absurd_extreme_comparisons)]
8099        #[allow(unused_comparisons)]
8100        if __tmp.remaining() < Self::ENCODED_LEN {
8101            panic!(
8102                "buffer is too small (need {} bytes, but got {})",
8103                Self::ENCODED_LEN,
8104                __tmp.remaining(),
8105            )
8106        }
8107        __tmp.put_u8(self.enable_lte);
8108        __tmp.put_u8(self.enable_pin);
8109        for val in &self.pin {
8110            __tmp.put_u8(*val);
8111        }
8112        for val in &self.new_pin {
8113            __tmp.put_u8(*val);
8114        }
8115        for val in &self.apn {
8116            __tmp.put_u8(*val);
8117        }
8118        for val in &self.puk {
8119            __tmp.put_u8(*val);
8120        }
8121        __tmp.put_u8(self.roaming);
8122        __tmp.put_u8(self.response as u8);
8123        if matches!(version, MavlinkVersion::V2) {
8124            let len = __tmp.len();
8125            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
8126        } else {
8127            __tmp.len()
8128        }
8129    }
8130}
8131#[doc = "id: 334"]
8132#[doc = "Report current used cellular network status."]
8133#[derive(Debug, Clone, PartialEq)]
8134#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8135#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8136pub struct CELLULAR_STATUS_DATA {
8137    #[doc = "Mobile country code. If unknown, set to UINT16_MAX"]
8138    pub mcc: u16,
8139    #[doc = "Mobile network code. If unknown, set to UINT16_MAX"]
8140    pub mnc: u16,
8141    #[doc = "Location area code. If unknown, set to 0"]
8142    pub lac: u16,
8143    #[doc = "Cellular modem status"]
8144    pub status: CellularStatusFlag,
8145    #[doc = "Failure reason when status in in CELLULAR_STATUS_FLAG_FAILED"]
8146    pub failure_reason: CellularNetworkFailedReason,
8147    #[doc = "Cellular network radio type: gsm, cdma, lte..."]
8148    pub mavtype: CellularNetworkRadioType,
8149    #[doc = "Signal quality in percent. If unknown, set to UINT8_MAX"]
8150    pub quality: u8,
8151}
8152impl CELLULAR_STATUS_DATA {
8153    pub const ENCODED_LEN: usize = 10usize;
8154    pub const DEFAULT: Self = Self {
8155        mcc: 0_u16,
8156        mnc: 0_u16,
8157        lac: 0_u16,
8158        status: CellularStatusFlag::DEFAULT,
8159        failure_reason: CellularNetworkFailedReason::DEFAULT,
8160        mavtype: CellularNetworkRadioType::DEFAULT,
8161        quality: 0_u8,
8162    };
8163    #[cfg(feature = "arbitrary")]
8164    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
8165        use arbitrary::{Arbitrary, Unstructured};
8166        let mut buf = [0u8; 1024];
8167        rng.fill_bytes(&mut buf);
8168        let mut unstructured = Unstructured::new(&buf);
8169        Self::arbitrary(&mut unstructured).unwrap_or_default()
8170    }
8171}
8172impl Default for CELLULAR_STATUS_DATA {
8173    fn default() -> Self {
8174        Self::DEFAULT.clone()
8175    }
8176}
8177impl MessageData for CELLULAR_STATUS_DATA {
8178    type Message = MavMessage;
8179    const ID: u32 = 334u32;
8180    const NAME: &'static str = "CELLULAR_STATUS";
8181    const EXTRA_CRC: u8 = 72u8;
8182    const ENCODED_LEN: usize = 10usize;
8183    fn deser(
8184        _version: MavlinkVersion,
8185        __input: &[u8],
8186    ) -> Result<Self, ::mavlink_core::error::ParserError> {
8187        let avail_len = __input.len();
8188        let mut payload_buf = [0; Self::ENCODED_LEN];
8189        let mut buf = if avail_len < Self::ENCODED_LEN {
8190            payload_buf[0..avail_len].copy_from_slice(__input);
8191            Bytes::new(&payload_buf)
8192        } else {
8193            Bytes::new(__input)
8194        };
8195        let mut __struct = Self::default();
8196        __struct.mcc = buf.get_u16_le();
8197        __struct.mnc = buf.get_u16_le();
8198        __struct.lac = buf.get_u16_le();
8199        let tmp = buf.get_u8();
8200        __struct.status =
8201            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
8202                enum_type: "CellularStatusFlag",
8203                value: tmp as u32,
8204            })?;
8205        let tmp = buf.get_u8();
8206        __struct.failure_reason =
8207            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
8208                enum_type: "CellularNetworkFailedReason",
8209                value: tmp as u32,
8210            })?;
8211        let tmp = buf.get_u8();
8212        __struct.mavtype =
8213            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
8214                enum_type: "CellularNetworkRadioType",
8215                value: tmp as u32,
8216            })?;
8217        __struct.quality = buf.get_u8();
8218        Ok(__struct)
8219    }
8220    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
8221        let mut __tmp = BytesMut::new(bytes);
8222        #[allow(clippy::absurd_extreme_comparisons)]
8223        #[allow(unused_comparisons)]
8224        if __tmp.remaining() < Self::ENCODED_LEN {
8225            panic!(
8226                "buffer is too small (need {} bytes, but got {})",
8227                Self::ENCODED_LEN,
8228                __tmp.remaining(),
8229            )
8230        }
8231        __tmp.put_u16_le(self.mcc);
8232        __tmp.put_u16_le(self.mnc);
8233        __tmp.put_u16_le(self.lac);
8234        __tmp.put_u8(self.status as u8);
8235        __tmp.put_u8(self.failure_reason as u8);
8236        __tmp.put_u8(self.mavtype as u8);
8237        __tmp.put_u8(self.quality);
8238        if matches!(version, MavlinkVersion::V2) {
8239            let len = __tmp.len();
8240            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
8241        } else {
8242            __tmp.len()
8243        }
8244    }
8245}
8246#[doc = "id: 5"]
8247#[doc = "Request to control this MAV."]
8248#[derive(Debug, Clone, PartialEq)]
8249#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8250#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8251pub struct CHANGE_OPERATOR_CONTROL_DATA {
8252    #[doc = "System the GCS requests control for"]
8253    pub target_system: u8,
8254    #[doc = "0: request control of this MAV, 1: Release control of this MAV"]
8255    pub control_request: u8,
8256    #[doc = "0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch."]
8257    pub version: u8,
8258    #[doc = "Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and \"!?,.-\""]
8259    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
8260    pub passkey: [u8; 25],
8261}
8262impl CHANGE_OPERATOR_CONTROL_DATA {
8263    pub const ENCODED_LEN: usize = 28usize;
8264    pub const DEFAULT: Self = Self {
8265        target_system: 0_u8,
8266        control_request: 0_u8,
8267        version: 0_u8,
8268        passkey: [0_u8; 25usize],
8269    };
8270    #[cfg(feature = "arbitrary")]
8271    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
8272        use arbitrary::{Arbitrary, Unstructured};
8273        let mut buf = [0u8; 1024];
8274        rng.fill_bytes(&mut buf);
8275        let mut unstructured = Unstructured::new(&buf);
8276        Self::arbitrary(&mut unstructured).unwrap_or_default()
8277    }
8278}
8279impl Default for CHANGE_OPERATOR_CONTROL_DATA {
8280    fn default() -> Self {
8281        Self::DEFAULT.clone()
8282    }
8283}
8284impl MessageData for CHANGE_OPERATOR_CONTROL_DATA {
8285    type Message = MavMessage;
8286    const ID: u32 = 5u32;
8287    const NAME: &'static str = "CHANGE_OPERATOR_CONTROL";
8288    const EXTRA_CRC: u8 = 217u8;
8289    const ENCODED_LEN: usize = 28usize;
8290    fn deser(
8291        _version: MavlinkVersion,
8292        __input: &[u8],
8293    ) -> Result<Self, ::mavlink_core::error::ParserError> {
8294        let avail_len = __input.len();
8295        let mut payload_buf = [0; Self::ENCODED_LEN];
8296        let mut buf = if avail_len < Self::ENCODED_LEN {
8297            payload_buf[0..avail_len].copy_from_slice(__input);
8298            Bytes::new(&payload_buf)
8299        } else {
8300            Bytes::new(__input)
8301        };
8302        let mut __struct = Self::default();
8303        __struct.target_system = buf.get_u8();
8304        __struct.control_request = buf.get_u8();
8305        __struct.version = buf.get_u8();
8306        for v in &mut __struct.passkey {
8307            let val = buf.get_u8();
8308            *v = val;
8309        }
8310        Ok(__struct)
8311    }
8312    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
8313        let mut __tmp = BytesMut::new(bytes);
8314        #[allow(clippy::absurd_extreme_comparisons)]
8315        #[allow(unused_comparisons)]
8316        if __tmp.remaining() < Self::ENCODED_LEN {
8317            panic!(
8318                "buffer is too small (need {} bytes, but got {})",
8319                Self::ENCODED_LEN,
8320                __tmp.remaining(),
8321            )
8322        }
8323        __tmp.put_u8(self.target_system);
8324        __tmp.put_u8(self.control_request);
8325        __tmp.put_u8(self.version);
8326        for val in &self.passkey {
8327            __tmp.put_u8(*val);
8328        }
8329        if matches!(version, MavlinkVersion::V2) {
8330            let len = __tmp.len();
8331            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
8332        } else {
8333            __tmp.len()
8334        }
8335    }
8336}
8337#[doc = "id: 6"]
8338#[doc = "Accept / deny control of this MAV."]
8339#[derive(Debug, Clone, PartialEq)]
8340#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8341#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8342pub struct CHANGE_OPERATOR_CONTROL_ACK_DATA {
8343    #[doc = "ID of the GCS this message"]
8344    pub gcs_system_id: u8,
8345    #[doc = "0: request control of this MAV, 1: Release control of this MAV"]
8346    pub control_request: u8,
8347    #[doc = "0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control"]
8348    pub ack: u8,
8349}
8350impl CHANGE_OPERATOR_CONTROL_ACK_DATA {
8351    pub const ENCODED_LEN: usize = 3usize;
8352    pub const DEFAULT: Self = Self {
8353        gcs_system_id: 0_u8,
8354        control_request: 0_u8,
8355        ack: 0_u8,
8356    };
8357    #[cfg(feature = "arbitrary")]
8358    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
8359        use arbitrary::{Arbitrary, Unstructured};
8360        let mut buf = [0u8; 1024];
8361        rng.fill_bytes(&mut buf);
8362        let mut unstructured = Unstructured::new(&buf);
8363        Self::arbitrary(&mut unstructured).unwrap_or_default()
8364    }
8365}
8366impl Default for CHANGE_OPERATOR_CONTROL_ACK_DATA {
8367    fn default() -> Self {
8368        Self::DEFAULT.clone()
8369    }
8370}
8371impl MessageData for CHANGE_OPERATOR_CONTROL_ACK_DATA {
8372    type Message = MavMessage;
8373    const ID: u32 = 6u32;
8374    const NAME: &'static str = "CHANGE_OPERATOR_CONTROL_ACK";
8375    const EXTRA_CRC: u8 = 104u8;
8376    const ENCODED_LEN: usize = 3usize;
8377    fn deser(
8378        _version: MavlinkVersion,
8379        __input: &[u8],
8380    ) -> Result<Self, ::mavlink_core::error::ParserError> {
8381        let avail_len = __input.len();
8382        let mut payload_buf = [0; Self::ENCODED_LEN];
8383        let mut buf = if avail_len < Self::ENCODED_LEN {
8384            payload_buf[0..avail_len].copy_from_slice(__input);
8385            Bytes::new(&payload_buf)
8386        } else {
8387            Bytes::new(__input)
8388        };
8389        let mut __struct = Self::default();
8390        __struct.gcs_system_id = buf.get_u8();
8391        __struct.control_request = buf.get_u8();
8392        __struct.ack = buf.get_u8();
8393        Ok(__struct)
8394    }
8395    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
8396        let mut __tmp = BytesMut::new(bytes);
8397        #[allow(clippy::absurd_extreme_comparisons)]
8398        #[allow(unused_comparisons)]
8399        if __tmp.remaining() < Self::ENCODED_LEN {
8400            panic!(
8401                "buffer is too small (need {} bytes, but got {})",
8402                Self::ENCODED_LEN,
8403                __tmp.remaining(),
8404            )
8405        }
8406        __tmp.put_u8(self.gcs_system_id);
8407        __tmp.put_u8(self.control_request);
8408        __tmp.put_u8(self.ack);
8409        if matches!(version, MavlinkVersion::V2) {
8410            let len = __tmp.len();
8411            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
8412        } else {
8413            __tmp.len()
8414        }
8415    }
8416}
8417#[doc = "id: 247"]
8418#[doc = "Information about a potential collision."]
8419#[derive(Debug, Clone, PartialEq)]
8420#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8421#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8422pub struct COLLISION_DATA {
8423    #[doc = "Unique identifier, domain based on src field"]
8424    pub id: u32,
8425    #[doc = "Estimated time until collision occurs"]
8426    pub time_to_minimum_delta: f32,
8427    #[doc = "Closest vertical distance between vehicle and object"]
8428    pub altitude_minimum_delta: f32,
8429    #[doc = "Closest horizontal distance between vehicle and object"]
8430    pub horizontal_minimum_delta: f32,
8431    #[doc = "Collision data source"]
8432    pub src: MavCollisionSrc,
8433    #[doc = "Action that is being taken to avoid this collision"]
8434    pub action: MavCollisionAction,
8435    #[doc = "How concerned the aircraft is about this collision"]
8436    pub threat_level: MavCollisionThreatLevel,
8437}
8438impl COLLISION_DATA {
8439    pub const ENCODED_LEN: usize = 19usize;
8440    pub const DEFAULT: Self = Self {
8441        id: 0_u32,
8442        time_to_minimum_delta: 0.0_f32,
8443        altitude_minimum_delta: 0.0_f32,
8444        horizontal_minimum_delta: 0.0_f32,
8445        src: MavCollisionSrc::DEFAULT,
8446        action: MavCollisionAction::DEFAULT,
8447        threat_level: MavCollisionThreatLevel::DEFAULT,
8448    };
8449    #[cfg(feature = "arbitrary")]
8450    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
8451        use arbitrary::{Arbitrary, Unstructured};
8452        let mut buf = [0u8; 1024];
8453        rng.fill_bytes(&mut buf);
8454        let mut unstructured = Unstructured::new(&buf);
8455        Self::arbitrary(&mut unstructured).unwrap_or_default()
8456    }
8457}
8458impl Default for COLLISION_DATA {
8459    fn default() -> Self {
8460        Self::DEFAULT.clone()
8461    }
8462}
8463impl MessageData for COLLISION_DATA {
8464    type Message = MavMessage;
8465    const ID: u32 = 247u32;
8466    const NAME: &'static str = "COLLISION";
8467    const EXTRA_CRC: u8 = 81u8;
8468    const ENCODED_LEN: usize = 19usize;
8469    fn deser(
8470        _version: MavlinkVersion,
8471        __input: &[u8],
8472    ) -> Result<Self, ::mavlink_core::error::ParserError> {
8473        let avail_len = __input.len();
8474        let mut payload_buf = [0; Self::ENCODED_LEN];
8475        let mut buf = if avail_len < Self::ENCODED_LEN {
8476            payload_buf[0..avail_len].copy_from_slice(__input);
8477            Bytes::new(&payload_buf)
8478        } else {
8479            Bytes::new(__input)
8480        };
8481        let mut __struct = Self::default();
8482        __struct.id = buf.get_u32_le();
8483        __struct.time_to_minimum_delta = buf.get_f32_le();
8484        __struct.altitude_minimum_delta = buf.get_f32_le();
8485        __struct.horizontal_minimum_delta = buf.get_f32_le();
8486        let tmp = buf.get_u8();
8487        __struct.src =
8488            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
8489                enum_type: "MavCollisionSrc",
8490                value: tmp as u32,
8491            })?;
8492        let tmp = buf.get_u8();
8493        __struct.action =
8494            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
8495                enum_type: "MavCollisionAction",
8496                value: tmp as u32,
8497            })?;
8498        let tmp = buf.get_u8();
8499        __struct.threat_level =
8500            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
8501                enum_type: "MavCollisionThreatLevel",
8502                value: tmp as u32,
8503            })?;
8504        Ok(__struct)
8505    }
8506    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
8507        let mut __tmp = BytesMut::new(bytes);
8508        #[allow(clippy::absurd_extreme_comparisons)]
8509        #[allow(unused_comparisons)]
8510        if __tmp.remaining() < Self::ENCODED_LEN {
8511            panic!(
8512                "buffer is too small (need {} bytes, but got {})",
8513                Self::ENCODED_LEN,
8514                __tmp.remaining(),
8515            )
8516        }
8517        __tmp.put_u32_le(self.id);
8518        __tmp.put_f32_le(self.time_to_minimum_delta);
8519        __tmp.put_f32_le(self.altitude_minimum_delta);
8520        __tmp.put_f32_le(self.horizontal_minimum_delta);
8521        __tmp.put_u8(self.src as u8);
8522        __tmp.put_u8(self.action as u8);
8523        __tmp.put_u8(self.threat_level as u8);
8524        if matches!(version, MavlinkVersion::V2) {
8525            let len = __tmp.len();
8526            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
8527        } else {
8528            __tmp.len()
8529        }
8530    }
8531}
8532#[doc = "id: 77"]
8533#[doc = "Report status of a command. Includes feedback whether the command was executed. The command microservice is documented at <https://mavlink.io/en/services/command.html>."]
8534#[derive(Debug, Clone, PartialEq)]
8535#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8536#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8537pub struct COMMAND_ACK_DATA {
8538    #[doc = "Command ID (of acknowledged command)."]
8539    pub command: MavCmd,
8540    #[doc = "Result of command."]
8541    pub result: MavResult,
8542    #[doc = "The progress percentage when result is MAV_RESULT_IN_PROGRESS. Values: [0-100], or UINT8_MAX if the progress is unknown."]
8543    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
8544    pub progress: u8,
8545    #[doc = "Additional result information. Can be set with a command-specific enum containing command-specific error reasons for why the command might be denied. If used, the associated enum must be documented in the corresponding MAV_CMD (this enum should have a 0 value to indicate \"unused\" or \"unknown\")."]
8546    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
8547    pub result_param2: i32,
8548    #[doc = "System ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement."]
8549    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
8550    pub target_system: u8,
8551    #[doc = "Component ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement."]
8552    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
8553    pub target_component: u8,
8554}
8555impl COMMAND_ACK_DATA {
8556    pub const ENCODED_LEN: usize = 10usize;
8557    pub const DEFAULT: Self = Self {
8558        command: MavCmd::DEFAULT,
8559        result: MavResult::DEFAULT,
8560        progress: 0_u8,
8561        result_param2: 0_i32,
8562        target_system: 0_u8,
8563        target_component: 0_u8,
8564    };
8565    #[cfg(feature = "arbitrary")]
8566    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
8567        use arbitrary::{Arbitrary, Unstructured};
8568        let mut buf = [0u8; 1024];
8569        rng.fill_bytes(&mut buf);
8570        let mut unstructured = Unstructured::new(&buf);
8571        Self::arbitrary(&mut unstructured).unwrap_or_default()
8572    }
8573}
8574impl Default for COMMAND_ACK_DATA {
8575    fn default() -> Self {
8576        Self::DEFAULT.clone()
8577    }
8578}
8579impl MessageData for COMMAND_ACK_DATA {
8580    type Message = MavMessage;
8581    const ID: u32 = 77u32;
8582    const NAME: &'static str = "COMMAND_ACK";
8583    const EXTRA_CRC: u8 = 143u8;
8584    const ENCODED_LEN: usize = 10usize;
8585    fn deser(
8586        _version: MavlinkVersion,
8587        __input: &[u8],
8588    ) -> Result<Self, ::mavlink_core::error::ParserError> {
8589        let avail_len = __input.len();
8590        let mut payload_buf = [0; Self::ENCODED_LEN];
8591        let mut buf = if avail_len < Self::ENCODED_LEN {
8592            payload_buf[0..avail_len].copy_from_slice(__input);
8593            Bytes::new(&payload_buf)
8594        } else {
8595            Bytes::new(__input)
8596        };
8597        let mut __struct = Self::default();
8598        let tmp = buf.get_u16_le();
8599        __struct.command = FromPrimitive::from_u16(tmp).ok_or(
8600            ::mavlink_core::error::ParserError::InvalidEnum {
8601                enum_type: "MavCmd",
8602                value: tmp as u32,
8603            },
8604        )?;
8605        let tmp = buf.get_u8();
8606        __struct.result =
8607            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
8608                enum_type: "MavResult",
8609                value: tmp as u32,
8610            })?;
8611        __struct.progress = buf.get_u8();
8612        __struct.result_param2 = buf.get_i32_le();
8613        __struct.target_system = buf.get_u8();
8614        __struct.target_component = buf.get_u8();
8615        Ok(__struct)
8616    }
8617    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
8618        let mut __tmp = BytesMut::new(bytes);
8619        #[allow(clippy::absurd_extreme_comparisons)]
8620        #[allow(unused_comparisons)]
8621        if __tmp.remaining() < Self::ENCODED_LEN {
8622            panic!(
8623                "buffer is too small (need {} bytes, but got {})",
8624                Self::ENCODED_LEN,
8625                __tmp.remaining(),
8626            )
8627        }
8628        __tmp.put_u16_le(self.command as u16);
8629        __tmp.put_u8(self.result as u8);
8630        __tmp.put_u8(self.progress);
8631        __tmp.put_i32_le(self.result_param2);
8632        __tmp.put_u8(self.target_system);
8633        __tmp.put_u8(self.target_component);
8634        if matches!(version, MavlinkVersion::V2) {
8635            let len = __tmp.len();
8636            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
8637        } else {
8638            __tmp.len()
8639        }
8640    }
8641}
8642#[doc = "id: 80"]
8643#[doc = "Cancel a long running command. The target system should respond with a COMMAND_ACK to the original command with result=MAV_RESULT_CANCELLED if the long running process was cancelled. If it has already completed, the cancel action can be ignored. The cancel action can be retried until some sort of acknowledgement to the original command has been received. The command microservice is documented at <https://mavlink.io/en/services/command.html>."]
8644#[derive(Debug, Clone, PartialEq)]
8645#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8646#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8647pub struct COMMAND_CANCEL_DATA {
8648    #[doc = "Command ID (of command to cancel)."]
8649    pub command: MavCmd,
8650    #[doc = "System executing long running command. Should not be broadcast (0)."]
8651    pub target_system: u8,
8652    #[doc = "Component executing long running command."]
8653    pub target_component: u8,
8654}
8655impl COMMAND_CANCEL_DATA {
8656    pub const ENCODED_LEN: usize = 4usize;
8657    pub const DEFAULT: Self = Self {
8658        command: MavCmd::DEFAULT,
8659        target_system: 0_u8,
8660        target_component: 0_u8,
8661    };
8662    #[cfg(feature = "arbitrary")]
8663    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
8664        use arbitrary::{Arbitrary, Unstructured};
8665        let mut buf = [0u8; 1024];
8666        rng.fill_bytes(&mut buf);
8667        let mut unstructured = Unstructured::new(&buf);
8668        Self::arbitrary(&mut unstructured).unwrap_or_default()
8669    }
8670}
8671impl Default for COMMAND_CANCEL_DATA {
8672    fn default() -> Self {
8673        Self::DEFAULT.clone()
8674    }
8675}
8676impl MessageData for COMMAND_CANCEL_DATA {
8677    type Message = MavMessage;
8678    const ID: u32 = 80u32;
8679    const NAME: &'static str = "COMMAND_CANCEL";
8680    const EXTRA_CRC: u8 = 14u8;
8681    const ENCODED_LEN: usize = 4usize;
8682    fn deser(
8683        _version: MavlinkVersion,
8684        __input: &[u8],
8685    ) -> Result<Self, ::mavlink_core::error::ParserError> {
8686        let avail_len = __input.len();
8687        let mut payload_buf = [0; Self::ENCODED_LEN];
8688        let mut buf = if avail_len < Self::ENCODED_LEN {
8689            payload_buf[0..avail_len].copy_from_slice(__input);
8690            Bytes::new(&payload_buf)
8691        } else {
8692            Bytes::new(__input)
8693        };
8694        let mut __struct = Self::default();
8695        let tmp = buf.get_u16_le();
8696        __struct.command = FromPrimitive::from_u16(tmp).ok_or(
8697            ::mavlink_core::error::ParserError::InvalidEnum {
8698                enum_type: "MavCmd",
8699                value: tmp as u32,
8700            },
8701        )?;
8702        __struct.target_system = buf.get_u8();
8703        __struct.target_component = buf.get_u8();
8704        Ok(__struct)
8705    }
8706    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
8707        let mut __tmp = BytesMut::new(bytes);
8708        #[allow(clippy::absurd_extreme_comparisons)]
8709        #[allow(unused_comparisons)]
8710        if __tmp.remaining() < Self::ENCODED_LEN {
8711            panic!(
8712                "buffer is too small (need {} bytes, but got {})",
8713                Self::ENCODED_LEN,
8714                __tmp.remaining(),
8715            )
8716        }
8717        __tmp.put_u16_le(self.command as u16);
8718        __tmp.put_u8(self.target_system);
8719        __tmp.put_u8(self.target_component);
8720        if matches!(version, MavlinkVersion::V2) {
8721            let len = __tmp.len();
8722            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
8723        } else {
8724            __tmp.len()
8725        }
8726    }
8727}
8728#[doc = "id: 75"]
8729#[doc = "Send a command with up to seven parameters to the MAV, where params 5 and 6 are integers and the other values are floats. This is preferred over COMMAND_LONG as it allows the MAV_FRAME to be specified for interpreting positional information, such as altitude. COMMAND_INT is also preferred when sending latitude and longitude data in params 5 and 6, as it allows for greater precision. Param 5 and 6 encode positional data as scaled integers, where the scaling depends on the actual command value. NaN or INT32_MAX may be used in float/integer params (respectively) to indicate optional/default values (e.g. to use the component's current latitude, yaw rather than a specific value). The command microservice is documented at <https://mavlink.io/en/services/command.html>."]
8730#[derive(Debug, Clone, PartialEq)]
8731#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8732#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8733pub struct COMMAND_INT_DATA {
8734    #[doc = "PARAM1, see MAV_CMD enum"]
8735    pub param1: f32,
8736    #[doc = "PARAM2, see MAV_CMD enum"]
8737    pub param2: f32,
8738    #[doc = "PARAM3, see MAV_CMD enum"]
8739    pub param3: f32,
8740    #[doc = "PARAM4, see MAV_CMD enum"]
8741    pub param4: f32,
8742    #[doc = "PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7"]
8743    pub x: i32,
8744    #[doc = "PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7"]
8745    pub y: i32,
8746    #[doc = "PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame)."]
8747    pub z: f32,
8748    #[doc = "The scheduled action for the mission item."]
8749    pub command: MavCmd,
8750    #[doc = "System ID"]
8751    pub target_system: u8,
8752    #[doc = "Component ID"]
8753    pub target_component: u8,
8754    #[doc = "The coordinate system of the COMMAND."]
8755    pub frame: MavFrame,
8756    #[doc = "Not used."]
8757    pub current: u8,
8758    #[doc = "Not used (set 0)."]
8759    pub autocontinue: u8,
8760}
8761impl COMMAND_INT_DATA {
8762    pub const ENCODED_LEN: usize = 35usize;
8763    pub const DEFAULT: Self = Self {
8764        param1: 0.0_f32,
8765        param2: 0.0_f32,
8766        param3: 0.0_f32,
8767        param4: 0.0_f32,
8768        x: 0_i32,
8769        y: 0_i32,
8770        z: 0.0_f32,
8771        command: MavCmd::DEFAULT,
8772        target_system: 0_u8,
8773        target_component: 0_u8,
8774        frame: MavFrame::DEFAULT,
8775        current: 0_u8,
8776        autocontinue: 0_u8,
8777    };
8778    #[cfg(feature = "arbitrary")]
8779    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
8780        use arbitrary::{Arbitrary, Unstructured};
8781        let mut buf = [0u8; 1024];
8782        rng.fill_bytes(&mut buf);
8783        let mut unstructured = Unstructured::new(&buf);
8784        Self::arbitrary(&mut unstructured).unwrap_or_default()
8785    }
8786}
8787impl Default for COMMAND_INT_DATA {
8788    fn default() -> Self {
8789        Self::DEFAULT.clone()
8790    }
8791}
8792impl MessageData for COMMAND_INT_DATA {
8793    type Message = MavMessage;
8794    const ID: u32 = 75u32;
8795    const NAME: &'static str = "COMMAND_INT";
8796    const EXTRA_CRC: u8 = 158u8;
8797    const ENCODED_LEN: usize = 35usize;
8798    fn deser(
8799        _version: MavlinkVersion,
8800        __input: &[u8],
8801    ) -> Result<Self, ::mavlink_core::error::ParserError> {
8802        let avail_len = __input.len();
8803        let mut payload_buf = [0; Self::ENCODED_LEN];
8804        let mut buf = if avail_len < Self::ENCODED_LEN {
8805            payload_buf[0..avail_len].copy_from_slice(__input);
8806            Bytes::new(&payload_buf)
8807        } else {
8808            Bytes::new(__input)
8809        };
8810        let mut __struct = Self::default();
8811        __struct.param1 = buf.get_f32_le();
8812        __struct.param2 = buf.get_f32_le();
8813        __struct.param3 = buf.get_f32_le();
8814        __struct.param4 = buf.get_f32_le();
8815        __struct.x = buf.get_i32_le();
8816        __struct.y = buf.get_i32_le();
8817        __struct.z = buf.get_f32_le();
8818        let tmp = buf.get_u16_le();
8819        __struct.command = FromPrimitive::from_u16(tmp).ok_or(
8820            ::mavlink_core::error::ParserError::InvalidEnum {
8821                enum_type: "MavCmd",
8822                value: tmp as u32,
8823            },
8824        )?;
8825        __struct.target_system = buf.get_u8();
8826        __struct.target_component = buf.get_u8();
8827        let tmp = buf.get_u8();
8828        __struct.frame =
8829            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
8830                enum_type: "MavFrame",
8831                value: tmp as u32,
8832            })?;
8833        __struct.current = buf.get_u8();
8834        __struct.autocontinue = buf.get_u8();
8835        Ok(__struct)
8836    }
8837    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
8838        let mut __tmp = BytesMut::new(bytes);
8839        #[allow(clippy::absurd_extreme_comparisons)]
8840        #[allow(unused_comparisons)]
8841        if __tmp.remaining() < Self::ENCODED_LEN {
8842            panic!(
8843                "buffer is too small (need {} bytes, but got {})",
8844                Self::ENCODED_LEN,
8845                __tmp.remaining(),
8846            )
8847        }
8848        __tmp.put_f32_le(self.param1);
8849        __tmp.put_f32_le(self.param2);
8850        __tmp.put_f32_le(self.param3);
8851        __tmp.put_f32_le(self.param4);
8852        __tmp.put_i32_le(self.x);
8853        __tmp.put_i32_le(self.y);
8854        __tmp.put_f32_le(self.z);
8855        __tmp.put_u16_le(self.command as u16);
8856        __tmp.put_u8(self.target_system);
8857        __tmp.put_u8(self.target_component);
8858        __tmp.put_u8(self.frame as u8);
8859        __tmp.put_u8(self.current);
8860        __tmp.put_u8(self.autocontinue);
8861        if matches!(version, MavlinkVersion::V2) {
8862            let len = __tmp.len();
8863            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
8864        } else {
8865            __tmp.len()
8866        }
8867    }
8868}
8869#[doc = "id: 76"]
8870#[doc = "Send a command with up to seven parameters to the MAV. COMMAND_INT is generally preferred when sending MAV_CMD commands that include positional information; it offers higher precision and allows the MAV_FRAME to be specified (which may otherwise be ambiguous, particularly for altitude). The command microservice is documented at <https://mavlink.io/en/services/command.html>."]
8871#[derive(Debug, Clone, PartialEq)]
8872#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8873#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8874pub struct COMMAND_LONG_DATA {
8875    #[doc = "Parameter 1 (for the specific command)."]
8876    pub param1: f32,
8877    #[doc = "Parameter 2 (for the specific command)."]
8878    pub param2: f32,
8879    #[doc = "Parameter 3 (for the specific command)."]
8880    pub param3: f32,
8881    #[doc = "Parameter 4 (for the specific command)."]
8882    pub param4: f32,
8883    #[doc = "Parameter 5 (for the specific command)."]
8884    pub param5: f32,
8885    #[doc = "Parameter 6 (for the specific command)."]
8886    pub param6: f32,
8887    #[doc = "Parameter 7 (for the specific command)."]
8888    pub param7: f32,
8889    #[doc = "Command ID (of command to send)."]
8890    pub command: MavCmd,
8891    #[doc = "System which should execute the command"]
8892    pub target_system: u8,
8893    #[doc = "Component which should execute the command, 0 for all components"]
8894    pub target_component: u8,
8895    #[doc = "0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)"]
8896    pub confirmation: u8,
8897}
8898impl COMMAND_LONG_DATA {
8899    pub const ENCODED_LEN: usize = 33usize;
8900    pub const DEFAULT: Self = Self {
8901        param1: 0.0_f32,
8902        param2: 0.0_f32,
8903        param3: 0.0_f32,
8904        param4: 0.0_f32,
8905        param5: 0.0_f32,
8906        param6: 0.0_f32,
8907        param7: 0.0_f32,
8908        command: MavCmd::DEFAULT,
8909        target_system: 0_u8,
8910        target_component: 0_u8,
8911        confirmation: 0_u8,
8912    };
8913    #[cfg(feature = "arbitrary")]
8914    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
8915        use arbitrary::{Arbitrary, Unstructured};
8916        let mut buf = [0u8; 1024];
8917        rng.fill_bytes(&mut buf);
8918        let mut unstructured = Unstructured::new(&buf);
8919        Self::arbitrary(&mut unstructured).unwrap_or_default()
8920    }
8921}
8922impl Default for COMMAND_LONG_DATA {
8923    fn default() -> Self {
8924        Self::DEFAULT.clone()
8925    }
8926}
8927impl MessageData for COMMAND_LONG_DATA {
8928    type Message = MavMessage;
8929    const ID: u32 = 76u32;
8930    const NAME: &'static str = "COMMAND_LONG";
8931    const EXTRA_CRC: u8 = 152u8;
8932    const ENCODED_LEN: usize = 33usize;
8933    fn deser(
8934        _version: MavlinkVersion,
8935        __input: &[u8],
8936    ) -> Result<Self, ::mavlink_core::error::ParserError> {
8937        let avail_len = __input.len();
8938        let mut payload_buf = [0; Self::ENCODED_LEN];
8939        let mut buf = if avail_len < Self::ENCODED_LEN {
8940            payload_buf[0..avail_len].copy_from_slice(__input);
8941            Bytes::new(&payload_buf)
8942        } else {
8943            Bytes::new(__input)
8944        };
8945        let mut __struct = Self::default();
8946        __struct.param1 = buf.get_f32_le();
8947        __struct.param2 = buf.get_f32_le();
8948        __struct.param3 = buf.get_f32_le();
8949        __struct.param4 = buf.get_f32_le();
8950        __struct.param5 = buf.get_f32_le();
8951        __struct.param6 = buf.get_f32_le();
8952        __struct.param7 = buf.get_f32_le();
8953        let tmp = buf.get_u16_le();
8954        __struct.command = FromPrimitive::from_u16(tmp).ok_or(
8955            ::mavlink_core::error::ParserError::InvalidEnum {
8956                enum_type: "MavCmd",
8957                value: tmp as u32,
8958            },
8959        )?;
8960        __struct.target_system = buf.get_u8();
8961        __struct.target_component = buf.get_u8();
8962        __struct.confirmation = buf.get_u8();
8963        Ok(__struct)
8964    }
8965    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
8966        let mut __tmp = BytesMut::new(bytes);
8967        #[allow(clippy::absurd_extreme_comparisons)]
8968        #[allow(unused_comparisons)]
8969        if __tmp.remaining() < Self::ENCODED_LEN {
8970            panic!(
8971                "buffer is too small (need {} bytes, but got {})",
8972                Self::ENCODED_LEN,
8973                __tmp.remaining(),
8974            )
8975        }
8976        __tmp.put_f32_le(self.param1);
8977        __tmp.put_f32_le(self.param2);
8978        __tmp.put_f32_le(self.param3);
8979        __tmp.put_f32_le(self.param4);
8980        __tmp.put_f32_le(self.param5);
8981        __tmp.put_f32_le(self.param6);
8982        __tmp.put_f32_le(self.param7);
8983        __tmp.put_u16_le(self.command as u16);
8984        __tmp.put_u8(self.target_system);
8985        __tmp.put_u8(self.target_component);
8986        __tmp.put_u8(self.confirmation);
8987        if matches!(version, MavlinkVersion::V2) {
8988            let len = __tmp.len();
8989            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
8990        } else {
8991            __tmp.len()
8992        }
8993    }
8994}
8995#[deprecated = " See `COMPONENT_METADATA` (Deprecated since 2022-04)"]
8996#[doc = "id: 395"]
8997#[doc = "Component information message, which may be requested using MAV_CMD_REQUEST_MESSAGE."]
8998#[derive(Debug, Clone, PartialEq)]
8999#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9000#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9001pub struct COMPONENT_INFORMATION_DATA {
9002    #[doc = "Timestamp (time since system boot)."]
9003    pub time_boot_ms: u32,
9004    #[doc = "CRC32 of the general metadata file (general_metadata_uri)."]
9005    pub general_metadata_file_crc: u32,
9006    #[doc = "CRC32 of peripherals metadata file (peripherals_metadata_uri)."]
9007    pub peripherals_metadata_file_crc: u32,
9008    #[doc = "MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated."]
9009    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9010    pub general_metadata_uri: [u8; 100],
9011    #[doc = "(Optional) MAVLink FTP URI for the peripherals metadata file (COMP_METADATA_TYPE_PERIPHERALS), which may be compressed with xz. This contains data about \"attached components\" such as UAVCAN nodes. The peripherals are in a separate file because the information must be generated dynamically at runtime. The string needs to be zero terminated."]
9012    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9013    pub peripherals_metadata_uri: [u8; 100],
9014}
9015impl COMPONENT_INFORMATION_DATA {
9016    pub const ENCODED_LEN: usize = 212usize;
9017    pub const DEFAULT: Self = Self {
9018        time_boot_ms: 0_u32,
9019        general_metadata_file_crc: 0_u32,
9020        peripherals_metadata_file_crc: 0_u32,
9021        general_metadata_uri: [0_u8; 100usize],
9022        peripherals_metadata_uri: [0_u8; 100usize],
9023    };
9024    #[cfg(feature = "arbitrary")]
9025    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
9026        use arbitrary::{Arbitrary, Unstructured};
9027        let mut buf = [0u8; 1024];
9028        rng.fill_bytes(&mut buf);
9029        let mut unstructured = Unstructured::new(&buf);
9030        Self::arbitrary(&mut unstructured).unwrap_or_default()
9031    }
9032}
9033impl Default for COMPONENT_INFORMATION_DATA {
9034    fn default() -> Self {
9035        Self::DEFAULT.clone()
9036    }
9037}
9038impl MessageData for COMPONENT_INFORMATION_DATA {
9039    type Message = MavMessage;
9040    const ID: u32 = 395u32;
9041    const NAME: &'static str = "COMPONENT_INFORMATION";
9042    const EXTRA_CRC: u8 = 0u8;
9043    const ENCODED_LEN: usize = 212usize;
9044    fn deser(
9045        _version: MavlinkVersion,
9046        __input: &[u8],
9047    ) -> Result<Self, ::mavlink_core::error::ParserError> {
9048        let avail_len = __input.len();
9049        let mut payload_buf = [0; Self::ENCODED_LEN];
9050        let mut buf = if avail_len < Self::ENCODED_LEN {
9051            payload_buf[0..avail_len].copy_from_slice(__input);
9052            Bytes::new(&payload_buf)
9053        } else {
9054            Bytes::new(__input)
9055        };
9056        let mut __struct = Self::default();
9057        __struct.time_boot_ms = buf.get_u32_le();
9058        __struct.general_metadata_file_crc = buf.get_u32_le();
9059        __struct.peripherals_metadata_file_crc = buf.get_u32_le();
9060        for v in &mut __struct.general_metadata_uri {
9061            let val = buf.get_u8();
9062            *v = val;
9063        }
9064        for v in &mut __struct.peripherals_metadata_uri {
9065            let val = buf.get_u8();
9066            *v = val;
9067        }
9068        Ok(__struct)
9069    }
9070    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
9071        let mut __tmp = BytesMut::new(bytes);
9072        #[allow(clippy::absurd_extreme_comparisons)]
9073        #[allow(unused_comparisons)]
9074        if __tmp.remaining() < Self::ENCODED_LEN {
9075            panic!(
9076                "buffer is too small (need {} bytes, but got {})",
9077                Self::ENCODED_LEN,
9078                __tmp.remaining(),
9079            )
9080        }
9081        __tmp.put_u32_le(self.time_boot_ms);
9082        __tmp.put_u32_le(self.general_metadata_file_crc);
9083        __tmp.put_u32_le(self.peripherals_metadata_file_crc);
9084        for val in &self.general_metadata_uri {
9085            __tmp.put_u8(*val);
9086        }
9087        for val in &self.peripherals_metadata_uri {
9088            __tmp.put_u8(*val);
9089        }
9090        if matches!(version, MavlinkVersion::V2) {
9091            let len = __tmp.len();
9092            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
9093        } else {
9094            __tmp.len()
9095        }
9096    }
9097}
9098#[doc = "id: 396"]
9099#[doc = "Basic component information data. Should be requested using MAV_CMD_REQUEST_MESSAGE on startup, or when required."]
9100#[derive(Debug, Clone, PartialEq)]
9101#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9102#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9103pub struct COMPONENT_INFORMATION_BASIC_DATA {
9104    #[doc = "Component capability flags"]
9105    pub capabilities: MavProtocolCapability,
9106    #[doc = "Timestamp (time since system boot)."]
9107    pub time_boot_ms: u32,
9108    #[doc = "Date of manufacture as a UNIX Epoch time (since 1.1.1970) in seconds."]
9109    pub time_manufacture_s: u32,
9110    #[doc = "Name of the component vendor. Needs to be zero terminated. The field is optional and can be empty/all zeros."]
9111    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9112    pub vendor_name: [u8; 32],
9113    #[doc = "Name of the component model. Needs to be zero terminated. The field is optional and can be empty/all zeros."]
9114    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9115    pub model_name: [u8; 32],
9116    #[doc = "Software version. The recommended format is SEMVER: 'major.minor.patch'  (any format may be used). The field must be zero terminated if it has a value. The field is optional and can be empty/all zeros."]
9117    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9118    pub software_version: [u8; 24],
9119    #[doc = "Hardware version. The recommended format is SEMVER: 'major.minor.patch'  (any format may be used). The field must be zero terminated if it has a value. The field is optional and can be empty/all zeros."]
9120    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9121    pub hardware_version: [u8; 24],
9122    #[doc = "Hardware serial number. The field must be zero terminated if it has a value. The field is optional and can be empty/all zeros."]
9123    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9124    pub serial_number: [u8; 32],
9125}
9126impl COMPONENT_INFORMATION_BASIC_DATA {
9127    pub const ENCODED_LEN: usize = 160usize;
9128    pub const DEFAULT: Self = Self {
9129        capabilities: MavProtocolCapability::DEFAULT,
9130        time_boot_ms: 0_u32,
9131        time_manufacture_s: 0_u32,
9132        vendor_name: [0_u8; 32usize],
9133        model_name: [0_u8; 32usize],
9134        software_version: [0_u8; 24usize],
9135        hardware_version: [0_u8; 24usize],
9136        serial_number: [0_u8; 32usize],
9137    };
9138    #[cfg(feature = "arbitrary")]
9139    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
9140        use arbitrary::{Arbitrary, Unstructured};
9141        let mut buf = [0u8; 1024];
9142        rng.fill_bytes(&mut buf);
9143        let mut unstructured = Unstructured::new(&buf);
9144        Self::arbitrary(&mut unstructured).unwrap_or_default()
9145    }
9146}
9147impl Default for COMPONENT_INFORMATION_BASIC_DATA {
9148    fn default() -> Self {
9149        Self::DEFAULT.clone()
9150    }
9151}
9152impl MessageData for COMPONENT_INFORMATION_BASIC_DATA {
9153    type Message = MavMessage;
9154    const ID: u32 = 396u32;
9155    const NAME: &'static str = "COMPONENT_INFORMATION_BASIC";
9156    const EXTRA_CRC: u8 = 50u8;
9157    const ENCODED_LEN: usize = 160usize;
9158    fn deser(
9159        _version: MavlinkVersion,
9160        __input: &[u8],
9161    ) -> Result<Self, ::mavlink_core::error::ParserError> {
9162        let avail_len = __input.len();
9163        let mut payload_buf = [0; Self::ENCODED_LEN];
9164        let mut buf = if avail_len < Self::ENCODED_LEN {
9165            payload_buf[0..avail_len].copy_from_slice(__input);
9166            Bytes::new(&payload_buf)
9167        } else {
9168            Bytes::new(__input)
9169        };
9170        let mut __struct = Self::default();
9171        let tmp = buf.get_u64_le();
9172        __struct.capabilities = MavProtocolCapability::from_bits(
9173            tmp & MavProtocolCapability::all().bits(),
9174        )
9175        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
9176            flag_type: "MavProtocolCapability",
9177            value: tmp as u32,
9178        })?;
9179        __struct.time_boot_ms = buf.get_u32_le();
9180        __struct.time_manufacture_s = buf.get_u32_le();
9181        for v in &mut __struct.vendor_name {
9182            let val = buf.get_u8();
9183            *v = val;
9184        }
9185        for v in &mut __struct.model_name {
9186            let val = buf.get_u8();
9187            *v = val;
9188        }
9189        for v in &mut __struct.software_version {
9190            let val = buf.get_u8();
9191            *v = val;
9192        }
9193        for v in &mut __struct.hardware_version {
9194            let val = buf.get_u8();
9195            *v = val;
9196        }
9197        for v in &mut __struct.serial_number {
9198            let val = buf.get_u8();
9199            *v = val;
9200        }
9201        Ok(__struct)
9202    }
9203    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
9204        let mut __tmp = BytesMut::new(bytes);
9205        #[allow(clippy::absurd_extreme_comparisons)]
9206        #[allow(unused_comparisons)]
9207        if __tmp.remaining() < Self::ENCODED_LEN {
9208            panic!(
9209                "buffer is too small (need {} bytes, but got {})",
9210                Self::ENCODED_LEN,
9211                __tmp.remaining(),
9212            )
9213        }
9214        __tmp.put_u64_le(self.capabilities.bits());
9215        __tmp.put_u32_le(self.time_boot_ms);
9216        __tmp.put_u32_le(self.time_manufacture_s);
9217        for val in &self.vendor_name {
9218            __tmp.put_u8(*val);
9219        }
9220        for val in &self.model_name {
9221            __tmp.put_u8(*val);
9222        }
9223        for val in &self.software_version {
9224            __tmp.put_u8(*val);
9225        }
9226        for val in &self.hardware_version {
9227            __tmp.put_u8(*val);
9228        }
9229        for val in &self.serial_number {
9230            __tmp.put_u8(*val);
9231        }
9232        if matches!(version, MavlinkVersion::V2) {
9233            let len = __tmp.len();
9234            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
9235        } else {
9236            __tmp.len()
9237        }
9238    }
9239}
9240#[doc = "id: 397"]
9241#[doc = "Component metadata message, which may be requested using MAV_CMD_REQUEST_MESSAGE.          This contains the MAVLink FTP URI and CRC for the component's general metadata file.         The file must be hosted on the component, and may be xz compressed.         The file CRC can be used for file caching.          The general metadata file can be read to get the locations of other metadata files (COMP_METADATA_TYPE) and translations, which may be hosted either on the vehicle or the internet.         For more information see: <https://mavlink.io/en/services/component_information.html>.          Note: Camera components should use CAMERA_INFORMATION instead, and autopilots may use both this message and AUTOPILOT_VERSION."]
9242#[derive(Debug, Clone, PartialEq)]
9243#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9244#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9245pub struct COMPONENT_METADATA_DATA {
9246    #[doc = "Timestamp (time since system boot)."]
9247    pub time_boot_ms: u32,
9248    #[doc = "CRC32 of the general metadata file."]
9249    pub file_crc: u32,
9250    #[doc = "MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated."]
9251    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9252    pub uri: [u8; 100],
9253}
9254impl COMPONENT_METADATA_DATA {
9255    pub const ENCODED_LEN: usize = 108usize;
9256    pub const DEFAULT: Self = Self {
9257        time_boot_ms: 0_u32,
9258        file_crc: 0_u32,
9259        uri: [0_u8; 100usize],
9260    };
9261    #[cfg(feature = "arbitrary")]
9262    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
9263        use arbitrary::{Arbitrary, Unstructured};
9264        let mut buf = [0u8; 1024];
9265        rng.fill_bytes(&mut buf);
9266        let mut unstructured = Unstructured::new(&buf);
9267        Self::arbitrary(&mut unstructured).unwrap_or_default()
9268    }
9269}
9270impl Default for COMPONENT_METADATA_DATA {
9271    fn default() -> Self {
9272        Self::DEFAULT.clone()
9273    }
9274}
9275impl MessageData for COMPONENT_METADATA_DATA {
9276    type Message = MavMessage;
9277    const ID: u32 = 397u32;
9278    const NAME: &'static str = "COMPONENT_METADATA";
9279    const EXTRA_CRC: u8 = 182u8;
9280    const ENCODED_LEN: usize = 108usize;
9281    fn deser(
9282        _version: MavlinkVersion,
9283        __input: &[u8],
9284    ) -> Result<Self, ::mavlink_core::error::ParserError> {
9285        let avail_len = __input.len();
9286        let mut payload_buf = [0; Self::ENCODED_LEN];
9287        let mut buf = if avail_len < Self::ENCODED_LEN {
9288            payload_buf[0..avail_len].copy_from_slice(__input);
9289            Bytes::new(&payload_buf)
9290        } else {
9291            Bytes::new(__input)
9292        };
9293        let mut __struct = Self::default();
9294        __struct.time_boot_ms = buf.get_u32_le();
9295        __struct.file_crc = buf.get_u32_le();
9296        for v in &mut __struct.uri {
9297            let val = buf.get_u8();
9298            *v = val;
9299        }
9300        Ok(__struct)
9301    }
9302    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
9303        let mut __tmp = BytesMut::new(bytes);
9304        #[allow(clippy::absurd_extreme_comparisons)]
9305        #[allow(unused_comparisons)]
9306        if __tmp.remaining() < Self::ENCODED_LEN {
9307            panic!(
9308                "buffer is too small (need {} bytes, but got {})",
9309                Self::ENCODED_LEN,
9310                __tmp.remaining(),
9311            )
9312        }
9313        __tmp.put_u32_le(self.time_boot_ms);
9314        __tmp.put_u32_le(self.file_crc);
9315        for val in &self.uri {
9316            __tmp.put_u8(*val);
9317        }
9318        if matches!(version, MavlinkVersion::V2) {
9319            let len = __tmp.len();
9320            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
9321        } else {
9322            __tmp.len()
9323        }
9324    }
9325}
9326#[doc = "id: 146"]
9327#[doc = "The smoothed, monotonic system state used to feed the control loops of the system."]
9328#[derive(Debug, Clone, PartialEq)]
9329#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9330#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9331pub struct CONTROL_SYSTEM_STATE_DATA {
9332    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
9333    pub time_usec: u64,
9334    #[doc = "X acceleration in body frame"]
9335    pub x_acc: f32,
9336    #[doc = "Y acceleration in body frame"]
9337    pub y_acc: f32,
9338    #[doc = "Z acceleration in body frame"]
9339    pub z_acc: f32,
9340    #[doc = "X velocity in body frame"]
9341    pub x_vel: f32,
9342    #[doc = "Y velocity in body frame"]
9343    pub y_vel: f32,
9344    #[doc = "Z velocity in body frame"]
9345    pub z_vel: f32,
9346    #[doc = "X position in local frame"]
9347    pub x_pos: f32,
9348    #[doc = "Y position in local frame"]
9349    pub y_pos: f32,
9350    #[doc = "Z position in local frame"]
9351    pub z_pos: f32,
9352    #[doc = "Airspeed, set to -1 if unknown"]
9353    pub airspeed: f32,
9354    #[doc = "Variance of body velocity estimate"]
9355    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9356    pub vel_variance: [f32; 3],
9357    #[doc = "Variance in local position"]
9358    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9359    pub pos_variance: [f32; 3],
9360    #[doc = "The attitude, represented as Quaternion"]
9361    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9362    pub q: [f32; 4],
9363    #[doc = "Angular rate in roll axis"]
9364    pub roll_rate: f32,
9365    #[doc = "Angular rate in pitch axis"]
9366    pub pitch_rate: f32,
9367    #[doc = "Angular rate in yaw axis"]
9368    pub yaw_rate: f32,
9369}
9370impl CONTROL_SYSTEM_STATE_DATA {
9371    pub const ENCODED_LEN: usize = 100usize;
9372    pub const DEFAULT: Self = Self {
9373        time_usec: 0_u64,
9374        x_acc: 0.0_f32,
9375        y_acc: 0.0_f32,
9376        z_acc: 0.0_f32,
9377        x_vel: 0.0_f32,
9378        y_vel: 0.0_f32,
9379        z_vel: 0.0_f32,
9380        x_pos: 0.0_f32,
9381        y_pos: 0.0_f32,
9382        z_pos: 0.0_f32,
9383        airspeed: 0.0_f32,
9384        vel_variance: [0.0_f32; 3usize],
9385        pos_variance: [0.0_f32; 3usize],
9386        q: [0.0_f32; 4usize],
9387        roll_rate: 0.0_f32,
9388        pitch_rate: 0.0_f32,
9389        yaw_rate: 0.0_f32,
9390    };
9391    #[cfg(feature = "arbitrary")]
9392    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
9393        use arbitrary::{Arbitrary, Unstructured};
9394        let mut buf = [0u8; 1024];
9395        rng.fill_bytes(&mut buf);
9396        let mut unstructured = Unstructured::new(&buf);
9397        Self::arbitrary(&mut unstructured).unwrap_or_default()
9398    }
9399}
9400impl Default for CONTROL_SYSTEM_STATE_DATA {
9401    fn default() -> Self {
9402        Self::DEFAULT.clone()
9403    }
9404}
9405impl MessageData for CONTROL_SYSTEM_STATE_DATA {
9406    type Message = MavMessage;
9407    const ID: u32 = 146u32;
9408    const NAME: &'static str = "CONTROL_SYSTEM_STATE";
9409    const EXTRA_CRC: u8 = 103u8;
9410    const ENCODED_LEN: usize = 100usize;
9411    fn deser(
9412        _version: MavlinkVersion,
9413        __input: &[u8],
9414    ) -> Result<Self, ::mavlink_core::error::ParserError> {
9415        let avail_len = __input.len();
9416        let mut payload_buf = [0; Self::ENCODED_LEN];
9417        let mut buf = if avail_len < Self::ENCODED_LEN {
9418            payload_buf[0..avail_len].copy_from_slice(__input);
9419            Bytes::new(&payload_buf)
9420        } else {
9421            Bytes::new(__input)
9422        };
9423        let mut __struct = Self::default();
9424        __struct.time_usec = buf.get_u64_le();
9425        __struct.x_acc = buf.get_f32_le();
9426        __struct.y_acc = buf.get_f32_le();
9427        __struct.z_acc = buf.get_f32_le();
9428        __struct.x_vel = buf.get_f32_le();
9429        __struct.y_vel = buf.get_f32_le();
9430        __struct.z_vel = buf.get_f32_le();
9431        __struct.x_pos = buf.get_f32_le();
9432        __struct.y_pos = buf.get_f32_le();
9433        __struct.z_pos = buf.get_f32_le();
9434        __struct.airspeed = buf.get_f32_le();
9435        for v in &mut __struct.vel_variance {
9436            let val = buf.get_f32_le();
9437            *v = val;
9438        }
9439        for v in &mut __struct.pos_variance {
9440            let val = buf.get_f32_le();
9441            *v = val;
9442        }
9443        for v in &mut __struct.q {
9444            let val = buf.get_f32_le();
9445            *v = val;
9446        }
9447        __struct.roll_rate = buf.get_f32_le();
9448        __struct.pitch_rate = buf.get_f32_le();
9449        __struct.yaw_rate = buf.get_f32_le();
9450        Ok(__struct)
9451    }
9452    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
9453        let mut __tmp = BytesMut::new(bytes);
9454        #[allow(clippy::absurd_extreme_comparisons)]
9455        #[allow(unused_comparisons)]
9456        if __tmp.remaining() < Self::ENCODED_LEN {
9457            panic!(
9458                "buffer is too small (need {} bytes, but got {})",
9459                Self::ENCODED_LEN,
9460                __tmp.remaining(),
9461            )
9462        }
9463        __tmp.put_u64_le(self.time_usec);
9464        __tmp.put_f32_le(self.x_acc);
9465        __tmp.put_f32_le(self.y_acc);
9466        __tmp.put_f32_le(self.z_acc);
9467        __tmp.put_f32_le(self.x_vel);
9468        __tmp.put_f32_le(self.y_vel);
9469        __tmp.put_f32_le(self.z_vel);
9470        __tmp.put_f32_le(self.x_pos);
9471        __tmp.put_f32_le(self.y_pos);
9472        __tmp.put_f32_le(self.z_pos);
9473        __tmp.put_f32_le(self.airspeed);
9474        for val in &self.vel_variance {
9475            __tmp.put_f32_le(*val);
9476        }
9477        for val in &self.pos_variance {
9478            __tmp.put_f32_le(*val);
9479        }
9480        for val in &self.q {
9481            __tmp.put_f32_le(*val);
9482        }
9483        __tmp.put_f32_le(self.roll_rate);
9484        __tmp.put_f32_le(self.pitch_rate);
9485        __tmp.put_f32_le(self.yaw_rate);
9486        if matches!(version, MavlinkVersion::V2) {
9487            let len = __tmp.len();
9488            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
9489        } else {
9490            __tmp.len()
9491        }
9492    }
9493}
9494#[doc = "id: 411"]
9495#[doc = "Regular broadcast for the current latest event sequence number for a component. This is used to check for dropped events."]
9496#[derive(Debug, Clone, PartialEq)]
9497#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9498#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9499pub struct CURRENT_EVENT_SEQUENCE_DATA {
9500    #[doc = "Sequence number."]
9501    pub sequence: u16,
9502    #[doc = "Flag bitset."]
9503    pub flags: MavEventCurrentSequenceFlags,
9504}
9505impl CURRENT_EVENT_SEQUENCE_DATA {
9506    pub const ENCODED_LEN: usize = 3usize;
9507    pub const DEFAULT: Self = Self {
9508        sequence: 0_u16,
9509        flags: MavEventCurrentSequenceFlags::DEFAULT,
9510    };
9511    #[cfg(feature = "arbitrary")]
9512    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
9513        use arbitrary::{Arbitrary, Unstructured};
9514        let mut buf = [0u8; 1024];
9515        rng.fill_bytes(&mut buf);
9516        let mut unstructured = Unstructured::new(&buf);
9517        Self::arbitrary(&mut unstructured).unwrap_or_default()
9518    }
9519}
9520impl Default for CURRENT_EVENT_SEQUENCE_DATA {
9521    fn default() -> Self {
9522        Self::DEFAULT.clone()
9523    }
9524}
9525impl MessageData for CURRENT_EVENT_SEQUENCE_DATA {
9526    type Message = MavMessage;
9527    const ID: u32 = 411u32;
9528    const NAME: &'static str = "CURRENT_EVENT_SEQUENCE";
9529    const EXTRA_CRC: u8 = 106u8;
9530    const ENCODED_LEN: usize = 3usize;
9531    fn deser(
9532        _version: MavlinkVersion,
9533        __input: &[u8],
9534    ) -> Result<Self, ::mavlink_core::error::ParserError> {
9535        let avail_len = __input.len();
9536        let mut payload_buf = [0; Self::ENCODED_LEN];
9537        let mut buf = if avail_len < Self::ENCODED_LEN {
9538            payload_buf[0..avail_len].copy_from_slice(__input);
9539            Bytes::new(&payload_buf)
9540        } else {
9541            Bytes::new(__input)
9542        };
9543        let mut __struct = Self::default();
9544        __struct.sequence = buf.get_u16_le();
9545        let tmp = buf.get_u8();
9546        __struct.flags =
9547            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
9548                enum_type: "MavEventCurrentSequenceFlags",
9549                value: tmp as u32,
9550            })?;
9551        Ok(__struct)
9552    }
9553    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
9554        let mut __tmp = BytesMut::new(bytes);
9555        #[allow(clippy::absurd_extreme_comparisons)]
9556        #[allow(unused_comparisons)]
9557        if __tmp.remaining() < Self::ENCODED_LEN {
9558            panic!(
9559                "buffer is too small (need {} bytes, but got {})",
9560                Self::ENCODED_LEN,
9561                __tmp.remaining(),
9562            )
9563        }
9564        __tmp.put_u16_le(self.sequence);
9565        __tmp.put_u8(self.flags as u8);
9566        if matches!(version, MavlinkVersion::V2) {
9567            let len = __tmp.len();
9568            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
9569        } else {
9570            __tmp.len()
9571        }
9572    }
9573}
9574#[doc = "id: 436"]
9575#[doc = "Get the current mode.         This should be emitted on any mode change, and broadcast at low rate (nominally 0.5 Hz).         It may be requested using MAV_CMD_REQUEST_MESSAGE.         See <https://mavlink.io/en/services/standard_modes.html>."]
9576#[derive(Debug, Clone, PartialEq)]
9577#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9578#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9579pub struct CURRENT_MODE_DATA {
9580    #[doc = "A bitfield for use for autopilot-specific flags"]
9581    pub custom_mode: u32,
9582    #[doc = "The custom_mode of the mode that was last commanded by the user (for example, with MAV_CMD_DO_SET_STANDARD_MODE, MAV_CMD_DO_SET_MODE or via RC). This should usually be the same as custom_mode. It will be different if the vehicle is unable to enter the intended mode, or has left that mode due to a failsafe condition. 0 indicates the intended custom mode is unknown/not supplied"]
9583    pub intended_custom_mode: u32,
9584    #[doc = "Standard mode."]
9585    pub standard_mode: MavStandardMode,
9586}
9587impl CURRENT_MODE_DATA {
9588    pub const ENCODED_LEN: usize = 9usize;
9589    pub const DEFAULT: Self = Self {
9590        custom_mode: 0_u32,
9591        intended_custom_mode: 0_u32,
9592        standard_mode: MavStandardMode::DEFAULT,
9593    };
9594    #[cfg(feature = "arbitrary")]
9595    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
9596        use arbitrary::{Arbitrary, Unstructured};
9597        let mut buf = [0u8; 1024];
9598        rng.fill_bytes(&mut buf);
9599        let mut unstructured = Unstructured::new(&buf);
9600        Self::arbitrary(&mut unstructured).unwrap_or_default()
9601    }
9602}
9603impl Default for CURRENT_MODE_DATA {
9604    fn default() -> Self {
9605        Self::DEFAULT.clone()
9606    }
9607}
9608impl MessageData for CURRENT_MODE_DATA {
9609    type Message = MavMessage;
9610    const ID: u32 = 436u32;
9611    const NAME: &'static str = "CURRENT_MODE";
9612    const EXTRA_CRC: u8 = 193u8;
9613    const ENCODED_LEN: usize = 9usize;
9614    fn deser(
9615        _version: MavlinkVersion,
9616        __input: &[u8],
9617    ) -> Result<Self, ::mavlink_core::error::ParserError> {
9618        let avail_len = __input.len();
9619        let mut payload_buf = [0; Self::ENCODED_LEN];
9620        let mut buf = if avail_len < Self::ENCODED_LEN {
9621            payload_buf[0..avail_len].copy_from_slice(__input);
9622            Bytes::new(&payload_buf)
9623        } else {
9624            Bytes::new(__input)
9625        };
9626        let mut __struct = Self::default();
9627        __struct.custom_mode = buf.get_u32_le();
9628        __struct.intended_custom_mode = buf.get_u32_le();
9629        let tmp = buf.get_u8();
9630        __struct.standard_mode =
9631            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
9632                enum_type: "MavStandardMode",
9633                value: tmp as u32,
9634            })?;
9635        Ok(__struct)
9636    }
9637    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
9638        let mut __tmp = BytesMut::new(bytes);
9639        #[allow(clippy::absurd_extreme_comparisons)]
9640        #[allow(unused_comparisons)]
9641        if __tmp.remaining() < Self::ENCODED_LEN {
9642            panic!(
9643                "buffer is too small (need {} bytes, but got {})",
9644                Self::ENCODED_LEN,
9645                __tmp.remaining(),
9646            )
9647        }
9648        __tmp.put_u32_le(self.custom_mode);
9649        __tmp.put_u32_le(self.intended_custom_mode);
9650        __tmp.put_u8(self.standard_mode as u8);
9651        if matches!(version, MavlinkVersion::V2) {
9652            let len = __tmp.len();
9653            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
9654        } else {
9655            __tmp.len()
9656        }
9657    }
9658}
9659#[deprecated = " See `MESSAGE_INTERVAL` (Deprecated since 2015-08)"]
9660#[doc = "id: 67"]
9661#[doc = "Data stream status information."]
9662#[derive(Debug, Clone, PartialEq)]
9663#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9664#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9665pub struct DATA_STREAM_DATA {
9666    #[doc = "The message rate"]
9667    pub message_rate: u16,
9668    #[doc = "The ID of the requested data stream"]
9669    pub stream_id: u8,
9670    #[doc = "1 stream is enabled, 0 stream is stopped."]
9671    pub on_off: u8,
9672}
9673impl DATA_STREAM_DATA {
9674    pub const ENCODED_LEN: usize = 4usize;
9675    pub const DEFAULT: Self = Self {
9676        message_rate: 0_u16,
9677        stream_id: 0_u8,
9678        on_off: 0_u8,
9679    };
9680    #[cfg(feature = "arbitrary")]
9681    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
9682        use arbitrary::{Arbitrary, Unstructured};
9683        let mut buf = [0u8; 1024];
9684        rng.fill_bytes(&mut buf);
9685        let mut unstructured = Unstructured::new(&buf);
9686        Self::arbitrary(&mut unstructured).unwrap_or_default()
9687    }
9688}
9689impl Default for DATA_STREAM_DATA {
9690    fn default() -> Self {
9691        Self::DEFAULT.clone()
9692    }
9693}
9694impl MessageData for DATA_STREAM_DATA {
9695    type Message = MavMessage;
9696    const ID: u32 = 67u32;
9697    const NAME: &'static str = "DATA_STREAM";
9698    const EXTRA_CRC: u8 = 21u8;
9699    const ENCODED_LEN: usize = 4usize;
9700    fn deser(
9701        _version: MavlinkVersion,
9702        __input: &[u8],
9703    ) -> Result<Self, ::mavlink_core::error::ParserError> {
9704        let avail_len = __input.len();
9705        let mut payload_buf = [0; Self::ENCODED_LEN];
9706        let mut buf = if avail_len < Self::ENCODED_LEN {
9707            payload_buf[0..avail_len].copy_from_slice(__input);
9708            Bytes::new(&payload_buf)
9709        } else {
9710            Bytes::new(__input)
9711        };
9712        let mut __struct = Self::default();
9713        __struct.message_rate = buf.get_u16_le();
9714        __struct.stream_id = buf.get_u8();
9715        __struct.on_off = buf.get_u8();
9716        Ok(__struct)
9717    }
9718    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
9719        let mut __tmp = BytesMut::new(bytes);
9720        #[allow(clippy::absurd_extreme_comparisons)]
9721        #[allow(unused_comparisons)]
9722        if __tmp.remaining() < Self::ENCODED_LEN {
9723            panic!(
9724                "buffer is too small (need {} bytes, but got {})",
9725                Self::ENCODED_LEN,
9726                __tmp.remaining(),
9727            )
9728        }
9729        __tmp.put_u16_le(self.message_rate);
9730        __tmp.put_u8(self.stream_id);
9731        __tmp.put_u8(self.on_off);
9732        if matches!(version, MavlinkVersion::V2) {
9733            let len = __tmp.len();
9734            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
9735        } else {
9736            __tmp.len()
9737        }
9738    }
9739}
9740#[doc = "id: 130"]
9741#[doc = "Handshake message to initiate, control and stop image streaming when using the Image Transmission Protocol: <https://mavlink.io/en/services/image_transmission.html>."]
9742#[derive(Debug, Clone, PartialEq)]
9743#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9744#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9745pub struct DATA_TRANSMISSION_HANDSHAKE_DATA {
9746    #[doc = "total data size (set on ACK only)."]
9747    pub size: u32,
9748    #[doc = "Width of a matrix or image."]
9749    pub width: u16,
9750    #[doc = "Height of a matrix or image."]
9751    pub height: u16,
9752    #[doc = "Number of packets being sent (set on ACK only)."]
9753    pub packets: u16,
9754    #[doc = "Type of requested/acknowledged data."]
9755    pub mavtype: MavlinkDataStreamType,
9756    #[doc = "Payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only)."]
9757    pub payload: u8,
9758    #[doc = "JPEG quality. Values: [1-100]."]
9759    pub jpg_quality: u8,
9760}
9761impl DATA_TRANSMISSION_HANDSHAKE_DATA {
9762    pub const ENCODED_LEN: usize = 13usize;
9763    pub const DEFAULT: Self = Self {
9764        size: 0_u32,
9765        width: 0_u16,
9766        height: 0_u16,
9767        packets: 0_u16,
9768        mavtype: MavlinkDataStreamType::DEFAULT,
9769        payload: 0_u8,
9770        jpg_quality: 0_u8,
9771    };
9772    #[cfg(feature = "arbitrary")]
9773    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
9774        use arbitrary::{Arbitrary, Unstructured};
9775        let mut buf = [0u8; 1024];
9776        rng.fill_bytes(&mut buf);
9777        let mut unstructured = Unstructured::new(&buf);
9778        Self::arbitrary(&mut unstructured).unwrap_or_default()
9779    }
9780}
9781impl Default for DATA_TRANSMISSION_HANDSHAKE_DATA {
9782    fn default() -> Self {
9783        Self::DEFAULT.clone()
9784    }
9785}
9786impl MessageData for DATA_TRANSMISSION_HANDSHAKE_DATA {
9787    type Message = MavMessage;
9788    const ID: u32 = 130u32;
9789    const NAME: &'static str = "DATA_TRANSMISSION_HANDSHAKE";
9790    const EXTRA_CRC: u8 = 29u8;
9791    const ENCODED_LEN: usize = 13usize;
9792    fn deser(
9793        _version: MavlinkVersion,
9794        __input: &[u8],
9795    ) -> Result<Self, ::mavlink_core::error::ParserError> {
9796        let avail_len = __input.len();
9797        let mut payload_buf = [0; Self::ENCODED_LEN];
9798        let mut buf = if avail_len < Self::ENCODED_LEN {
9799            payload_buf[0..avail_len].copy_from_slice(__input);
9800            Bytes::new(&payload_buf)
9801        } else {
9802            Bytes::new(__input)
9803        };
9804        let mut __struct = Self::default();
9805        __struct.size = buf.get_u32_le();
9806        __struct.width = buf.get_u16_le();
9807        __struct.height = buf.get_u16_le();
9808        __struct.packets = buf.get_u16_le();
9809        let tmp = buf.get_u8();
9810        __struct.mavtype =
9811            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
9812                enum_type: "MavlinkDataStreamType",
9813                value: tmp as u32,
9814            })?;
9815        __struct.payload = buf.get_u8();
9816        __struct.jpg_quality = buf.get_u8();
9817        Ok(__struct)
9818    }
9819    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
9820        let mut __tmp = BytesMut::new(bytes);
9821        #[allow(clippy::absurd_extreme_comparisons)]
9822        #[allow(unused_comparisons)]
9823        if __tmp.remaining() < Self::ENCODED_LEN {
9824            panic!(
9825                "buffer is too small (need {} bytes, but got {})",
9826                Self::ENCODED_LEN,
9827                __tmp.remaining(),
9828            )
9829        }
9830        __tmp.put_u32_le(self.size);
9831        __tmp.put_u16_le(self.width);
9832        __tmp.put_u16_le(self.height);
9833        __tmp.put_u16_le(self.packets);
9834        __tmp.put_u8(self.mavtype as u8);
9835        __tmp.put_u8(self.payload);
9836        __tmp.put_u8(self.jpg_quality);
9837        if matches!(version, MavlinkVersion::V2) {
9838            let len = __tmp.len();
9839            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
9840        } else {
9841            __tmp.len()
9842        }
9843    }
9844}
9845#[doc = "id: 254"]
9846#[doc = "Send a debug value. The index is used to discriminate between values. These values show up in the plot of QGroundControl as DEBUG N."]
9847#[derive(Debug, Clone, PartialEq)]
9848#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9849#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9850pub struct DEBUG_DATA {
9851    #[doc = "Timestamp (time since system boot)."]
9852    pub time_boot_ms: u32,
9853    #[doc = "DEBUG value"]
9854    pub value: f32,
9855    #[doc = "index of debug variable"]
9856    pub ind: u8,
9857}
9858impl DEBUG_DATA {
9859    pub const ENCODED_LEN: usize = 9usize;
9860    pub const DEFAULT: Self = Self {
9861        time_boot_ms: 0_u32,
9862        value: 0.0_f32,
9863        ind: 0_u8,
9864    };
9865    #[cfg(feature = "arbitrary")]
9866    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
9867        use arbitrary::{Arbitrary, Unstructured};
9868        let mut buf = [0u8; 1024];
9869        rng.fill_bytes(&mut buf);
9870        let mut unstructured = Unstructured::new(&buf);
9871        Self::arbitrary(&mut unstructured).unwrap_or_default()
9872    }
9873}
9874impl Default for DEBUG_DATA {
9875    fn default() -> Self {
9876        Self::DEFAULT.clone()
9877    }
9878}
9879impl MessageData for DEBUG_DATA {
9880    type Message = MavMessage;
9881    const ID: u32 = 254u32;
9882    const NAME: &'static str = "DEBUG";
9883    const EXTRA_CRC: u8 = 46u8;
9884    const ENCODED_LEN: usize = 9usize;
9885    fn deser(
9886        _version: MavlinkVersion,
9887        __input: &[u8],
9888    ) -> Result<Self, ::mavlink_core::error::ParserError> {
9889        let avail_len = __input.len();
9890        let mut payload_buf = [0; Self::ENCODED_LEN];
9891        let mut buf = if avail_len < Self::ENCODED_LEN {
9892            payload_buf[0..avail_len].copy_from_slice(__input);
9893            Bytes::new(&payload_buf)
9894        } else {
9895            Bytes::new(__input)
9896        };
9897        let mut __struct = Self::default();
9898        __struct.time_boot_ms = buf.get_u32_le();
9899        __struct.value = buf.get_f32_le();
9900        __struct.ind = buf.get_u8();
9901        Ok(__struct)
9902    }
9903    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
9904        let mut __tmp = BytesMut::new(bytes);
9905        #[allow(clippy::absurd_extreme_comparisons)]
9906        #[allow(unused_comparisons)]
9907        if __tmp.remaining() < Self::ENCODED_LEN {
9908            panic!(
9909                "buffer is too small (need {} bytes, but got {})",
9910                Self::ENCODED_LEN,
9911                __tmp.remaining(),
9912            )
9913        }
9914        __tmp.put_u32_le(self.time_boot_ms);
9915        __tmp.put_f32_le(self.value);
9916        __tmp.put_u8(self.ind);
9917        if matches!(version, MavlinkVersion::V2) {
9918            let len = __tmp.len();
9919            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
9920        } else {
9921            __tmp.len()
9922        }
9923    }
9924}
9925#[doc = "id: 350"]
9926#[doc = "Large debug/prototyping array. The message uses the maximum available payload for data. The array_id and name fields are used to discriminate between messages in code and in user interfaces (respectively). Do not use in production code."]
9927#[derive(Debug, Clone, PartialEq)]
9928#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9929#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9930pub struct DEBUG_FLOAT_ARRAY_DATA {
9931    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
9932    pub time_usec: u64,
9933    #[doc = "Unique ID used to discriminate between arrays"]
9934    pub array_id: u16,
9935    #[doc = "Name, for human-friendly display in a Ground Control Station"]
9936    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9937    pub name: [u8; 10],
9938    #[doc = "data"]
9939    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
9940    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
9941    pub data: [f32; 58],
9942}
9943impl DEBUG_FLOAT_ARRAY_DATA {
9944    pub const ENCODED_LEN: usize = 252usize;
9945    pub const DEFAULT: Self = Self {
9946        time_usec: 0_u64,
9947        array_id: 0_u16,
9948        name: [0_u8; 10usize],
9949        data: [0.0_f32; 58usize],
9950    };
9951    #[cfg(feature = "arbitrary")]
9952    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
9953        use arbitrary::{Arbitrary, Unstructured};
9954        let mut buf = [0u8; 1024];
9955        rng.fill_bytes(&mut buf);
9956        let mut unstructured = Unstructured::new(&buf);
9957        Self::arbitrary(&mut unstructured).unwrap_or_default()
9958    }
9959}
9960impl Default for DEBUG_FLOAT_ARRAY_DATA {
9961    fn default() -> Self {
9962        Self::DEFAULT.clone()
9963    }
9964}
9965impl MessageData for DEBUG_FLOAT_ARRAY_DATA {
9966    type Message = MavMessage;
9967    const ID: u32 = 350u32;
9968    const NAME: &'static str = "DEBUG_FLOAT_ARRAY";
9969    const EXTRA_CRC: u8 = 232u8;
9970    const ENCODED_LEN: usize = 252usize;
9971    fn deser(
9972        _version: MavlinkVersion,
9973        __input: &[u8],
9974    ) -> Result<Self, ::mavlink_core::error::ParserError> {
9975        let avail_len = __input.len();
9976        let mut payload_buf = [0; Self::ENCODED_LEN];
9977        let mut buf = if avail_len < Self::ENCODED_LEN {
9978            payload_buf[0..avail_len].copy_from_slice(__input);
9979            Bytes::new(&payload_buf)
9980        } else {
9981            Bytes::new(__input)
9982        };
9983        let mut __struct = Self::default();
9984        __struct.time_usec = buf.get_u64_le();
9985        __struct.array_id = buf.get_u16_le();
9986        for v in &mut __struct.name {
9987            let val = buf.get_u8();
9988            *v = val;
9989        }
9990        for v in &mut __struct.data {
9991            let val = buf.get_f32_le();
9992            *v = val;
9993        }
9994        Ok(__struct)
9995    }
9996    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
9997        let mut __tmp = BytesMut::new(bytes);
9998        #[allow(clippy::absurd_extreme_comparisons)]
9999        #[allow(unused_comparisons)]
10000        if __tmp.remaining() < Self::ENCODED_LEN {
10001            panic!(
10002                "buffer is too small (need {} bytes, but got {})",
10003                Self::ENCODED_LEN,
10004                __tmp.remaining(),
10005            )
10006        }
10007        __tmp.put_u64_le(self.time_usec);
10008        __tmp.put_u16_le(self.array_id);
10009        for val in &self.name {
10010            __tmp.put_u8(*val);
10011        }
10012        for val in &self.data {
10013            __tmp.put_f32_le(*val);
10014        }
10015        if matches!(version, MavlinkVersion::V2) {
10016            let len = __tmp.len();
10017            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
10018        } else {
10019            __tmp.len()
10020        }
10021    }
10022}
10023#[doc = "id: 250"]
10024#[doc = "To debug something using a named 3D vector."]
10025#[derive(Debug, Clone, PartialEq)]
10026#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10027#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10028pub struct DEBUG_VECT_DATA {
10029    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
10030    pub time_usec: u64,
10031    #[doc = "x"]
10032    pub x: f32,
10033    #[doc = "y"]
10034    pub y: f32,
10035    #[doc = "z"]
10036    pub z: f32,
10037    #[doc = "Name"]
10038    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
10039    pub name: [u8; 10],
10040}
10041impl DEBUG_VECT_DATA {
10042    pub const ENCODED_LEN: usize = 30usize;
10043    pub const DEFAULT: Self = Self {
10044        time_usec: 0_u64,
10045        x: 0.0_f32,
10046        y: 0.0_f32,
10047        z: 0.0_f32,
10048        name: [0_u8; 10usize],
10049    };
10050    #[cfg(feature = "arbitrary")]
10051    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
10052        use arbitrary::{Arbitrary, Unstructured};
10053        let mut buf = [0u8; 1024];
10054        rng.fill_bytes(&mut buf);
10055        let mut unstructured = Unstructured::new(&buf);
10056        Self::arbitrary(&mut unstructured).unwrap_or_default()
10057    }
10058}
10059impl Default for DEBUG_VECT_DATA {
10060    fn default() -> Self {
10061        Self::DEFAULT.clone()
10062    }
10063}
10064impl MessageData for DEBUG_VECT_DATA {
10065    type Message = MavMessage;
10066    const ID: u32 = 250u32;
10067    const NAME: &'static str = "DEBUG_VECT";
10068    const EXTRA_CRC: u8 = 49u8;
10069    const ENCODED_LEN: usize = 30usize;
10070    fn deser(
10071        _version: MavlinkVersion,
10072        __input: &[u8],
10073    ) -> Result<Self, ::mavlink_core::error::ParserError> {
10074        let avail_len = __input.len();
10075        let mut payload_buf = [0; Self::ENCODED_LEN];
10076        let mut buf = if avail_len < Self::ENCODED_LEN {
10077            payload_buf[0..avail_len].copy_from_slice(__input);
10078            Bytes::new(&payload_buf)
10079        } else {
10080            Bytes::new(__input)
10081        };
10082        let mut __struct = Self::default();
10083        __struct.time_usec = buf.get_u64_le();
10084        __struct.x = buf.get_f32_le();
10085        __struct.y = buf.get_f32_le();
10086        __struct.z = buf.get_f32_le();
10087        for v in &mut __struct.name {
10088            let val = buf.get_u8();
10089            *v = val;
10090        }
10091        Ok(__struct)
10092    }
10093    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
10094        let mut __tmp = BytesMut::new(bytes);
10095        #[allow(clippy::absurd_extreme_comparisons)]
10096        #[allow(unused_comparisons)]
10097        if __tmp.remaining() < Self::ENCODED_LEN {
10098            panic!(
10099                "buffer is too small (need {} bytes, but got {})",
10100                Self::ENCODED_LEN,
10101                __tmp.remaining(),
10102            )
10103        }
10104        __tmp.put_u64_le(self.time_usec);
10105        __tmp.put_f32_le(self.x);
10106        __tmp.put_f32_le(self.y);
10107        __tmp.put_f32_le(self.z);
10108        for val in &self.name {
10109            __tmp.put_u8(*val);
10110        }
10111        if matches!(version, MavlinkVersion::V2) {
10112            let len = __tmp.len();
10113            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
10114        } else {
10115            __tmp.len()
10116        }
10117    }
10118}
10119#[doc = "id: 132"]
10120#[doc = "Distance sensor information for an onboard rangefinder."]
10121#[derive(Debug, Clone, PartialEq)]
10122#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10123#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10124pub struct DISTANCE_SENSOR_DATA {
10125    #[doc = "Timestamp (time since system boot)."]
10126    pub time_boot_ms: u32,
10127    #[doc = "Minimum distance the sensor can measure"]
10128    pub min_distance: u16,
10129    #[doc = "Maximum distance the sensor can measure"]
10130    pub max_distance: u16,
10131    #[doc = "Current distance reading"]
10132    pub current_distance: u16,
10133    #[doc = "Type of distance sensor."]
10134    pub mavtype: MavDistanceSensor,
10135    #[doc = "Onboard ID of the sensor"]
10136    pub id: u8,
10137    #[doc = "Direction the sensor faces. downward-facing: ROTATION_PITCH_270, upward-facing: ROTATION_PITCH_90, backward-facing: ROTATION_PITCH_180, forward-facing: ROTATION_NONE, left-facing: ROTATION_YAW_90, right-facing: ROTATION_YAW_270"]
10138    pub orientation: MavSensorOrientation,
10139    #[doc = "Measurement variance. Max standard deviation is 6cm. UINT8_MAX if unknown."]
10140    pub covariance: u8,
10141    #[doc = "Horizontal Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0."]
10142    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
10143    pub horizontal_fov: f32,
10144    #[doc = "Vertical Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0."]
10145    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
10146    pub vertical_fov: f32,
10147    #[doc = "Quaternion of the sensor orientation in vehicle body frame (w, x, y, z order, zero-rotation is 1, 0, 0, 0). Zero-rotation is along the vehicle body x-axis. This field is required if the orientation is set to MAV_SENSOR_ROTATION_CUSTOM. Set it to 0 if invalid.\""]
10148    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
10149    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
10150    pub quaternion: [f32; 4],
10151    #[doc = "Signal quality of the sensor. Specific to each sensor type, representing the relation of the signal strength with the target reflectivity, distance, size or aspect, but normalised as a percentage. 0 = unknown/unset signal quality, 1 = invalid signal, 100 = perfect signal."]
10152    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
10153    pub signal_quality: u8,
10154}
10155impl DISTANCE_SENSOR_DATA {
10156    pub const ENCODED_LEN: usize = 39usize;
10157    pub const DEFAULT: Self = Self {
10158        time_boot_ms: 0_u32,
10159        min_distance: 0_u16,
10160        max_distance: 0_u16,
10161        current_distance: 0_u16,
10162        mavtype: MavDistanceSensor::DEFAULT,
10163        id: 0_u8,
10164        orientation: MavSensorOrientation::DEFAULT,
10165        covariance: 0_u8,
10166        horizontal_fov: 0.0_f32,
10167        vertical_fov: 0.0_f32,
10168        quaternion: [0.0_f32; 4usize],
10169        signal_quality: 0_u8,
10170    };
10171    #[cfg(feature = "arbitrary")]
10172    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
10173        use arbitrary::{Arbitrary, Unstructured};
10174        let mut buf = [0u8; 1024];
10175        rng.fill_bytes(&mut buf);
10176        let mut unstructured = Unstructured::new(&buf);
10177        Self::arbitrary(&mut unstructured).unwrap_or_default()
10178    }
10179}
10180impl Default for DISTANCE_SENSOR_DATA {
10181    fn default() -> Self {
10182        Self::DEFAULT.clone()
10183    }
10184}
10185impl MessageData for DISTANCE_SENSOR_DATA {
10186    type Message = MavMessage;
10187    const ID: u32 = 132u32;
10188    const NAME: &'static str = "DISTANCE_SENSOR";
10189    const EXTRA_CRC: u8 = 85u8;
10190    const ENCODED_LEN: usize = 39usize;
10191    fn deser(
10192        _version: MavlinkVersion,
10193        __input: &[u8],
10194    ) -> Result<Self, ::mavlink_core::error::ParserError> {
10195        let avail_len = __input.len();
10196        let mut payload_buf = [0; Self::ENCODED_LEN];
10197        let mut buf = if avail_len < Self::ENCODED_LEN {
10198            payload_buf[0..avail_len].copy_from_slice(__input);
10199            Bytes::new(&payload_buf)
10200        } else {
10201            Bytes::new(__input)
10202        };
10203        let mut __struct = Self::default();
10204        __struct.time_boot_ms = buf.get_u32_le();
10205        __struct.min_distance = buf.get_u16_le();
10206        __struct.max_distance = buf.get_u16_le();
10207        __struct.current_distance = buf.get_u16_le();
10208        let tmp = buf.get_u8();
10209        __struct.mavtype =
10210            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
10211                enum_type: "MavDistanceSensor",
10212                value: tmp as u32,
10213            })?;
10214        __struct.id = buf.get_u8();
10215        let tmp = buf.get_u8();
10216        __struct.orientation =
10217            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
10218                enum_type: "MavSensorOrientation",
10219                value: tmp as u32,
10220            })?;
10221        __struct.covariance = buf.get_u8();
10222        __struct.horizontal_fov = buf.get_f32_le();
10223        __struct.vertical_fov = buf.get_f32_le();
10224        for v in &mut __struct.quaternion {
10225            let val = buf.get_f32_le();
10226            *v = val;
10227        }
10228        __struct.signal_quality = buf.get_u8();
10229        Ok(__struct)
10230    }
10231    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
10232        let mut __tmp = BytesMut::new(bytes);
10233        #[allow(clippy::absurd_extreme_comparisons)]
10234        #[allow(unused_comparisons)]
10235        if __tmp.remaining() < Self::ENCODED_LEN {
10236            panic!(
10237                "buffer is too small (need {} bytes, but got {})",
10238                Self::ENCODED_LEN,
10239                __tmp.remaining(),
10240            )
10241        }
10242        __tmp.put_u32_le(self.time_boot_ms);
10243        __tmp.put_u16_le(self.min_distance);
10244        __tmp.put_u16_le(self.max_distance);
10245        __tmp.put_u16_le(self.current_distance);
10246        __tmp.put_u8(self.mavtype as u8);
10247        __tmp.put_u8(self.id);
10248        __tmp.put_u8(self.orientation as u8);
10249        __tmp.put_u8(self.covariance);
10250        __tmp.put_f32_le(self.horizontal_fov);
10251        __tmp.put_f32_le(self.vertical_fov);
10252        for val in &self.quaternion {
10253            __tmp.put_f32_le(*val);
10254        }
10255        __tmp.put_u8(self.signal_quality);
10256        if matches!(version, MavlinkVersion::V2) {
10257            let len = __tmp.len();
10258            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
10259        } else {
10260            __tmp.len()
10261        }
10262    }
10263}
10264#[doc = "id: 225"]
10265#[doc = "EFI status output."]
10266#[derive(Debug, Clone, PartialEq)]
10267#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10268#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10269pub struct EFI_STATUS_DATA {
10270    #[doc = "ECU index"]
10271    pub ecu_index: f32,
10272    #[doc = "RPM"]
10273    pub rpm: f32,
10274    #[doc = "Fuel consumed"]
10275    pub fuel_consumed: f32,
10276    #[doc = "Fuel flow rate"]
10277    pub fuel_flow: f32,
10278    #[doc = "Engine load"]
10279    pub engine_load: f32,
10280    #[doc = "Throttle position"]
10281    pub throttle_position: f32,
10282    #[doc = "Spark dwell time"]
10283    pub spark_dwell_time: f32,
10284    #[doc = "Barometric pressure"]
10285    pub barometric_pressure: f32,
10286    #[doc = "Intake manifold pressure("]
10287    pub intake_manifold_pressure: f32,
10288    #[doc = "Intake manifold temperature"]
10289    pub intake_manifold_temperature: f32,
10290    #[doc = "Cylinder head temperature"]
10291    pub cylinder_head_temperature: f32,
10292    #[doc = "Ignition timing (Crank angle degrees)"]
10293    pub ignition_timing: f32,
10294    #[doc = "Injection time"]
10295    pub injection_time: f32,
10296    #[doc = "Exhaust gas temperature"]
10297    pub exhaust_gas_temperature: f32,
10298    #[doc = "Output throttle"]
10299    pub throttle_out: f32,
10300    #[doc = "Pressure/temperature compensation"]
10301    pub pt_compensation: f32,
10302    #[doc = "EFI health status"]
10303    pub health: u8,
10304    #[doc = "Supply voltage to EFI sparking system.  Zero in this value means \"unknown\", so if the supply voltage really is zero volts use 0.0001 instead."]
10305    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
10306    pub ignition_voltage: f32,
10307    #[doc = "Fuel pressure. Zero in this value means \"unknown\", so if the fuel pressure really is zero kPa use 0.0001 instead."]
10308    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
10309    pub fuel_pressure: f32,
10310}
10311impl EFI_STATUS_DATA {
10312    pub const ENCODED_LEN: usize = 73usize;
10313    pub const DEFAULT: Self = Self {
10314        ecu_index: 0.0_f32,
10315        rpm: 0.0_f32,
10316        fuel_consumed: 0.0_f32,
10317        fuel_flow: 0.0_f32,
10318        engine_load: 0.0_f32,
10319        throttle_position: 0.0_f32,
10320        spark_dwell_time: 0.0_f32,
10321        barometric_pressure: 0.0_f32,
10322        intake_manifold_pressure: 0.0_f32,
10323        intake_manifold_temperature: 0.0_f32,
10324        cylinder_head_temperature: 0.0_f32,
10325        ignition_timing: 0.0_f32,
10326        injection_time: 0.0_f32,
10327        exhaust_gas_temperature: 0.0_f32,
10328        throttle_out: 0.0_f32,
10329        pt_compensation: 0.0_f32,
10330        health: 0_u8,
10331        ignition_voltage: 0.0_f32,
10332        fuel_pressure: 0.0_f32,
10333    };
10334    #[cfg(feature = "arbitrary")]
10335    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
10336        use arbitrary::{Arbitrary, Unstructured};
10337        let mut buf = [0u8; 1024];
10338        rng.fill_bytes(&mut buf);
10339        let mut unstructured = Unstructured::new(&buf);
10340        Self::arbitrary(&mut unstructured).unwrap_or_default()
10341    }
10342}
10343impl Default for EFI_STATUS_DATA {
10344    fn default() -> Self {
10345        Self::DEFAULT.clone()
10346    }
10347}
10348impl MessageData for EFI_STATUS_DATA {
10349    type Message = MavMessage;
10350    const ID: u32 = 225u32;
10351    const NAME: &'static str = "EFI_STATUS";
10352    const EXTRA_CRC: u8 = 208u8;
10353    const ENCODED_LEN: usize = 73usize;
10354    fn deser(
10355        _version: MavlinkVersion,
10356        __input: &[u8],
10357    ) -> Result<Self, ::mavlink_core::error::ParserError> {
10358        let avail_len = __input.len();
10359        let mut payload_buf = [0; Self::ENCODED_LEN];
10360        let mut buf = if avail_len < Self::ENCODED_LEN {
10361            payload_buf[0..avail_len].copy_from_slice(__input);
10362            Bytes::new(&payload_buf)
10363        } else {
10364            Bytes::new(__input)
10365        };
10366        let mut __struct = Self::default();
10367        __struct.ecu_index = buf.get_f32_le();
10368        __struct.rpm = buf.get_f32_le();
10369        __struct.fuel_consumed = buf.get_f32_le();
10370        __struct.fuel_flow = buf.get_f32_le();
10371        __struct.engine_load = buf.get_f32_le();
10372        __struct.throttle_position = buf.get_f32_le();
10373        __struct.spark_dwell_time = buf.get_f32_le();
10374        __struct.barometric_pressure = buf.get_f32_le();
10375        __struct.intake_manifold_pressure = buf.get_f32_le();
10376        __struct.intake_manifold_temperature = buf.get_f32_le();
10377        __struct.cylinder_head_temperature = buf.get_f32_le();
10378        __struct.ignition_timing = buf.get_f32_le();
10379        __struct.injection_time = buf.get_f32_le();
10380        __struct.exhaust_gas_temperature = buf.get_f32_le();
10381        __struct.throttle_out = buf.get_f32_le();
10382        __struct.pt_compensation = buf.get_f32_le();
10383        __struct.health = buf.get_u8();
10384        __struct.ignition_voltage = buf.get_f32_le();
10385        __struct.fuel_pressure = buf.get_f32_le();
10386        Ok(__struct)
10387    }
10388    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
10389        let mut __tmp = BytesMut::new(bytes);
10390        #[allow(clippy::absurd_extreme_comparisons)]
10391        #[allow(unused_comparisons)]
10392        if __tmp.remaining() < Self::ENCODED_LEN {
10393            panic!(
10394                "buffer is too small (need {} bytes, but got {})",
10395                Self::ENCODED_LEN,
10396                __tmp.remaining(),
10397            )
10398        }
10399        __tmp.put_f32_le(self.ecu_index);
10400        __tmp.put_f32_le(self.rpm);
10401        __tmp.put_f32_le(self.fuel_consumed);
10402        __tmp.put_f32_le(self.fuel_flow);
10403        __tmp.put_f32_le(self.engine_load);
10404        __tmp.put_f32_le(self.throttle_position);
10405        __tmp.put_f32_le(self.spark_dwell_time);
10406        __tmp.put_f32_le(self.barometric_pressure);
10407        __tmp.put_f32_le(self.intake_manifold_pressure);
10408        __tmp.put_f32_le(self.intake_manifold_temperature);
10409        __tmp.put_f32_le(self.cylinder_head_temperature);
10410        __tmp.put_f32_le(self.ignition_timing);
10411        __tmp.put_f32_le(self.injection_time);
10412        __tmp.put_f32_le(self.exhaust_gas_temperature);
10413        __tmp.put_f32_le(self.throttle_out);
10414        __tmp.put_f32_le(self.pt_compensation);
10415        __tmp.put_u8(self.health);
10416        __tmp.put_f32_le(self.ignition_voltage);
10417        __tmp.put_f32_le(self.fuel_pressure);
10418        if matches!(version, MavlinkVersion::V2) {
10419            let len = __tmp.len();
10420            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
10421        } else {
10422            __tmp.len()
10423        }
10424    }
10425}
10426#[doc = "id: 131"]
10427#[doc = "Data packet for images sent using the Image Transmission Protocol: <https://mavlink.io/en/services/image_transmission.html>."]
10428#[derive(Debug, Clone, PartialEq)]
10429#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10430#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10431pub struct ENCAPSULATED_DATA_DATA {
10432    #[doc = "sequence number (starting with 0 on every transmission)"]
10433    pub seqnr: u16,
10434    #[doc = "image data bytes"]
10435    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
10436    pub data: [u8; 253],
10437}
10438impl ENCAPSULATED_DATA_DATA {
10439    pub const ENCODED_LEN: usize = 255usize;
10440    pub const DEFAULT: Self = Self {
10441        seqnr: 0_u16,
10442        data: [0_u8; 253usize],
10443    };
10444    #[cfg(feature = "arbitrary")]
10445    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
10446        use arbitrary::{Arbitrary, Unstructured};
10447        let mut buf = [0u8; 1024];
10448        rng.fill_bytes(&mut buf);
10449        let mut unstructured = Unstructured::new(&buf);
10450        Self::arbitrary(&mut unstructured).unwrap_or_default()
10451    }
10452}
10453impl Default for ENCAPSULATED_DATA_DATA {
10454    fn default() -> Self {
10455        Self::DEFAULT.clone()
10456    }
10457}
10458impl MessageData for ENCAPSULATED_DATA_DATA {
10459    type Message = MavMessage;
10460    const ID: u32 = 131u32;
10461    const NAME: &'static str = "ENCAPSULATED_DATA";
10462    const EXTRA_CRC: u8 = 223u8;
10463    const ENCODED_LEN: usize = 255usize;
10464    fn deser(
10465        _version: MavlinkVersion,
10466        __input: &[u8],
10467    ) -> Result<Self, ::mavlink_core::error::ParserError> {
10468        let avail_len = __input.len();
10469        let mut payload_buf = [0; Self::ENCODED_LEN];
10470        let mut buf = if avail_len < Self::ENCODED_LEN {
10471            payload_buf[0..avail_len].copy_from_slice(__input);
10472            Bytes::new(&payload_buf)
10473        } else {
10474            Bytes::new(__input)
10475        };
10476        let mut __struct = Self::default();
10477        __struct.seqnr = buf.get_u16_le();
10478        for v in &mut __struct.data {
10479            let val = buf.get_u8();
10480            *v = val;
10481        }
10482        Ok(__struct)
10483    }
10484    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
10485        let mut __tmp = BytesMut::new(bytes);
10486        #[allow(clippy::absurd_extreme_comparisons)]
10487        #[allow(unused_comparisons)]
10488        if __tmp.remaining() < Self::ENCODED_LEN {
10489            panic!(
10490                "buffer is too small (need {} bytes, but got {})",
10491                Self::ENCODED_LEN,
10492                __tmp.remaining(),
10493            )
10494        }
10495        __tmp.put_u16_le(self.seqnr);
10496        for val in &self.data {
10497            __tmp.put_u8(*val);
10498        }
10499        if matches!(version, MavlinkVersion::V2) {
10500            let len = __tmp.len();
10501            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
10502        } else {
10503            __tmp.len()
10504        }
10505    }
10506}
10507#[doc = "id: 290"]
10508#[doc = "ESC information for lower rate streaming. Recommended streaming rate 1Hz. See ESC_STATUS for higher-rate ESC data."]
10509#[derive(Debug, Clone, PartialEq)]
10510#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10511#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10512pub struct ESC_INFO_DATA {
10513    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number."]
10514    pub time_usec: u64,
10515    #[doc = "Number of reported errors by each ESC since boot."]
10516    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
10517    pub error_count: [u32; 4],
10518    #[doc = "Counter of data packets received."]
10519    pub counter: u16,
10520    #[doc = "Bitmap of ESC failure flags."]
10521    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
10522    pub failure_flags: [u16; 4],
10523    #[doc = "Temperature of each ESC. INT16_MAX: if data not supplied by ESC."]
10524    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
10525    pub temperature: [i16; 4],
10526    #[doc = "Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4."]
10527    pub index: u8,
10528    #[doc = "Total number of ESCs in all messages of this type. Message fields with an index higher than this should be ignored because they contain invalid data."]
10529    pub count: u8,
10530    #[doc = "Connection type protocol for all ESC."]
10531    pub connection_type: EscConnectionType,
10532    #[doc = "Information regarding online/offline status of each ESC."]
10533    pub info: u8,
10534}
10535impl ESC_INFO_DATA {
10536    pub const ENCODED_LEN: usize = 46usize;
10537    pub const DEFAULT: Self = Self {
10538        time_usec: 0_u64,
10539        error_count: [0_u32; 4usize],
10540        counter: 0_u16,
10541        failure_flags: [0_u16; 4usize],
10542        temperature: [0_i16; 4usize],
10543        index: 0_u8,
10544        count: 0_u8,
10545        connection_type: EscConnectionType::DEFAULT,
10546        info: 0_u8,
10547    };
10548    #[cfg(feature = "arbitrary")]
10549    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
10550        use arbitrary::{Arbitrary, Unstructured};
10551        let mut buf = [0u8; 1024];
10552        rng.fill_bytes(&mut buf);
10553        let mut unstructured = Unstructured::new(&buf);
10554        Self::arbitrary(&mut unstructured).unwrap_or_default()
10555    }
10556}
10557impl Default for ESC_INFO_DATA {
10558    fn default() -> Self {
10559        Self::DEFAULT.clone()
10560    }
10561}
10562impl MessageData for ESC_INFO_DATA {
10563    type Message = MavMessage;
10564    const ID: u32 = 290u32;
10565    const NAME: &'static str = "ESC_INFO";
10566    const EXTRA_CRC: u8 = 251u8;
10567    const ENCODED_LEN: usize = 46usize;
10568    fn deser(
10569        _version: MavlinkVersion,
10570        __input: &[u8],
10571    ) -> Result<Self, ::mavlink_core::error::ParserError> {
10572        let avail_len = __input.len();
10573        let mut payload_buf = [0; Self::ENCODED_LEN];
10574        let mut buf = if avail_len < Self::ENCODED_LEN {
10575            payload_buf[0..avail_len].copy_from_slice(__input);
10576            Bytes::new(&payload_buf)
10577        } else {
10578            Bytes::new(__input)
10579        };
10580        let mut __struct = Self::default();
10581        __struct.time_usec = buf.get_u64_le();
10582        for v in &mut __struct.error_count {
10583            let val = buf.get_u32_le();
10584            *v = val;
10585        }
10586        __struct.counter = buf.get_u16_le();
10587        for v in &mut __struct.failure_flags {
10588            let val = buf.get_u16_le();
10589            *v = val;
10590        }
10591        for v in &mut __struct.temperature {
10592            let val = buf.get_i16_le();
10593            *v = val;
10594        }
10595        __struct.index = buf.get_u8();
10596        __struct.count = buf.get_u8();
10597        let tmp = buf.get_u8();
10598        __struct.connection_type =
10599            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
10600                enum_type: "EscConnectionType",
10601                value: tmp as u32,
10602            })?;
10603        __struct.info = buf.get_u8();
10604        Ok(__struct)
10605    }
10606    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
10607        let mut __tmp = BytesMut::new(bytes);
10608        #[allow(clippy::absurd_extreme_comparisons)]
10609        #[allow(unused_comparisons)]
10610        if __tmp.remaining() < Self::ENCODED_LEN {
10611            panic!(
10612                "buffer is too small (need {} bytes, but got {})",
10613                Self::ENCODED_LEN,
10614                __tmp.remaining(),
10615            )
10616        }
10617        __tmp.put_u64_le(self.time_usec);
10618        for val in &self.error_count {
10619            __tmp.put_u32_le(*val);
10620        }
10621        __tmp.put_u16_le(self.counter);
10622        for val in &self.failure_flags {
10623            __tmp.put_u16_le(*val);
10624        }
10625        for val in &self.temperature {
10626            __tmp.put_i16_le(*val);
10627        }
10628        __tmp.put_u8(self.index);
10629        __tmp.put_u8(self.count);
10630        __tmp.put_u8(self.connection_type as u8);
10631        __tmp.put_u8(self.info);
10632        if matches!(version, MavlinkVersion::V2) {
10633            let len = __tmp.len();
10634            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
10635        } else {
10636            __tmp.len()
10637        }
10638    }
10639}
10640#[doc = "id: 291"]
10641#[doc = "ESC information for higher rate streaming. Recommended streaming rate is ~10 Hz. Information that changes more slowly is sent in ESC_INFO. It should typically only be streamed on high-bandwidth links (i.e. to a companion computer)."]
10642#[derive(Debug, Clone, PartialEq)]
10643#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10644#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10645pub struct ESC_STATUS_DATA {
10646    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number."]
10647    pub time_usec: u64,
10648    #[doc = "Reported motor RPM from each ESC (negative for reverse rotation)."]
10649    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
10650    pub rpm: [i32; 4],
10651    #[doc = "Voltage measured from each ESC."]
10652    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
10653    pub voltage: [f32; 4],
10654    #[doc = "Current measured from each ESC."]
10655    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
10656    pub current: [f32; 4],
10657    #[doc = "Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4."]
10658    pub index: u8,
10659}
10660impl ESC_STATUS_DATA {
10661    pub const ENCODED_LEN: usize = 57usize;
10662    pub const DEFAULT: Self = Self {
10663        time_usec: 0_u64,
10664        rpm: [0_i32; 4usize],
10665        voltage: [0.0_f32; 4usize],
10666        current: [0.0_f32; 4usize],
10667        index: 0_u8,
10668    };
10669    #[cfg(feature = "arbitrary")]
10670    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
10671        use arbitrary::{Arbitrary, Unstructured};
10672        let mut buf = [0u8; 1024];
10673        rng.fill_bytes(&mut buf);
10674        let mut unstructured = Unstructured::new(&buf);
10675        Self::arbitrary(&mut unstructured).unwrap_or_default()
10676    }
10677}
10678impl Default for ESC_STATUS_DATA {
10679    fn default() -> Self {
10680        Self::DEFAULT.clone()
10681    }
10682}
10683impl MessageData for ESC_STATUS_DATA {
10684    type Message = MavMessage;
10685    const ID: u32 = 291u32;
10686    const NAME: &'static str = "ESC_STATUS";
10687    const EXTRA_CRC: u8 = 10u8;
10688    const ENCODED_LEN: usize = 57usize;
10689    fn deser(
10690        _version: MavlinkVersion,
10691        __input: &[u8],
10692    ) -> Result<Self, ::mavlink_core::error::ParserError> {
10693        let avail_len = __input.len();
10694        let mut payload_buf = [0; Self::ENCODED_LEN];
10695        let mut buf = if avail_len < Self::ENCODED_LEN {
10696            payload_buf[0..avail_len].copy_from_slice(__input);
10697            Bytes::new(&payload_buf)
10698        } else {
10699            Bytes::new(__input)
10700        };
10701        let mut __struct = Self::default();
10702        __struct.time_usec = buf.get_u64_le();
10703        for v in &mut __struct.rpm {
10704            let val = buf.get_i32_le();
10705            *v = val;
10706        }
10707        for v in &mut __struct.voltage {
10708            let val = buf.get_f32_le();
10709            *v = val;
10710        }
10711        for v in &mut __struct.current {
10712            let val = buf.get_f32_le();
10713            *v = val;
10714        }
10715        __struct.index = buf.get_u8();
10716        Ok(__struct)
10717    }
10718    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
10719        let mut __tmp = BytesMut::new(bytes);
10720        #[allow(clippy::absurd_extreme_comparisons)]
10721        #[allow(unused_comparisons)]
10722        if __tmp.remaining() < Self::ENCODED_LEN {
10723            panic!(
10724                "buffer is too small (need {} bytes, but got {})",
10725                Self::ENCODED_LEN,
10726                __tmp.remaining(),
10727            )
10728        }
10729        __tmp.put_u64_le(self.time_usec);
10730        for val in &self.rpm {
10731            __tmp.put_i32_le(*val);
10732        }
10733        for val in &self.voltage {
10734            __tmp.put_f32_le(*val);
10735        }
10736        for val in &self.current {
10737            __tmp.put_f32_le(*val);
10738        }
10739        __tmp.put_u8(self.index);
10740        if matches!(version, MavlinkVersion::V2) {
10741            let len = __tmp.len();
10742            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
10743        } else {
10744            __tmp.len()
10745        }
10746    }
10747}
10748#[doc = "id: 230"]
10749#[doc = "Estimator status message including flags, innovation test ratios and estimated accuracies. The flags message is an integer bitmask containing information on which EKF outputs are valid. See the ESTIMATOR_STATUS_FLAGS enum definition for further information. The innovation test ratios show the magnitude of the sensor innovation divided by the innovation check threshold. Under normal operation the innovation test ratios should be below 0.5 with occasional values up to 1.0. Values greater than 1.0 should be rare under normal operation and indicate that a measurement has been rejected by the filter. The user should be notified if an innovation test ratio greater than 1.0 is recorded. Notifications for values in the range between 0.5 and 1.0 should be optional and controllable by the user."]
10750#[derive(Debug, Clone, PartialEq)]
10751#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10752#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10753pub struct ESTIMATOR_STATUS_DATA {
10754    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
10755    pub time_usec: u64,
10756    #[doc = "Velocity innovation test ratio"]
10757    pub vel_ratio: f32,
10758    #[doc = "Horizontal position innovation test ratio"]
10759    pub pos_horiz_ratio: f32,
10760    #[doc = "Vertical position innovation test ratio"]
10761    pub pos_vert_ratio: f32,
10762    #[doc = "Magnetometer innovation test ratio"]
10763    pub mag_ratio: f32,
10764    #[doc = "Height above terrain innovation test ratio"]
10765    pub hagl_ratio: f32,
10766    #[doc = "True airspeed innovation test ratio"]
10767    pub tas_ratio: f32,
10768    #[doc = "Horizontal position 1-STD accuracy relative to the EKF local origin"]
10769    pub pos_horiz_accuracy: f32,
10770    #[doc = "Vertical position 1-STD accuracy relative to the EKF local origin"]
10771    pub pos_vert_accuracy: f32,
10772    #[doc = "Bitmap indicating which EKF outputs are valid."]
10773    pub flags: EstimatorStatusFlags,
10774}
10775impl ESTIMATOR_STATUS_DATA {
10776    pub const ENCODED_LEN: usize = 42usize;
10777    pub const DEFAULT: Self = Self {
10778        time_usec: 0_u64,
10779        vel_ratio: 0.0_f32,
10780        pos_horiz_ratio: 0.0_f32,
10781        pos_vert_ratio: 0.0_f32,
10782        mag_ratio: 0.0_f32,
10783        hagl_ratio: 0.0_f32,
10784        tas_ratio: 0.0_f32,
10785        pos_horiz_accuracy: 0.0_f32,
10786        pos_vert_accuracy: 0.0_f32,
10787        flags: EstimatorStatusFlags::DEFAULT,
10788    };
10789    #[cfg(feature = "arbitrary")]
10790    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
10791        use arbitrary::{Arbitrary, Unstructured};
10792        let mut buf = [0u8; 1024];
10793        rng.fill_bytes(&mut buf);
10794        let mut unstructured = Unstructured::new(&buf);
10795        Self::arbitrary(&mut unstructured).unwrap_or_default()
10796    }
10797}
10798impl Default for ESTIMATOR_STATUS_DATA {
10799    fn default() -> Self {
10800        Self::DEFAULT.clone()
10801    }
10802}
10803impl MessageData for ESTIMATOR_STATUS_DATA {
10804    type Message = MavMessage;
10805    const ID: u32 = 230u32;
10806    const NAME: &'static str = "ESTIMATOR_STATUS";
10807    const EXTRA_CRC: u8 = 163u8;
10808    const ENCODED_LEN: usize = 42usize;
10809    fn deser(
10810        _version: MavlinkVersion,
10811        __input: &[u8],
10812    ) -> Result<Self, ::mavlink_core::error::ParserError> {
10813        let avail_len = __input.len();
10814        let mut payload_buf = [0; Self::ENCODED_LEN];
10815        let mut buf = if avail_len < Self::ENCODED_LEN {
10816            payload_buf[0..avail_len].copy_from_slice(__input);
10817            Bytes::new(&payload_buf)
10818        } else {
10819            Bytes::new(__input)
10820        };
10821        let mut __struct = Self::default();
10822        __struct.time_usec = buf.get_u64_le();
10823        __struct.vel_ratio = buf.get_f32_le();
10824        __struct.pos_horiz_ratio = buf.get_f32_le();
10825        __struct.pos_vert_ratio = buf.get_f32_le();
10826        __struct.mag_ratio = buf.get_f32_le();
10827        __struct.hagl_ratio = buf.get_f32_le();
10828        __struct.tas_ratio = buf.get_f32_le();
10829        __struct.pos_horiz_accuracy = buf.get_f32_le();
10830        __struct.pos_vert_accuracy = buf.get_f32_le();
10831        let tmp = buf.get_u16_le();
10832        __struct.flags = EstimatorStatusFlags::from_bits(tmp & EstimatorStatusFlags::all().bits())
10833            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
10834                flag_type: "EstimatorStatusFlags",
10835                value: tmp as u32,
10836            })?;
10837        Ok(__struct)
10838    }
10839    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
10840        let mut __tmp = BytesMut::new(bytes);
10841        #[allow(clippy::absurd_extreme_comparisons)]
10842        #[allow(unused_comparisons)]
10843        if __tmp.remaining() < Self::ENCODED_LEN {
10844            panic!(
10845                "buffer is too small (need {} bytes, but got {})",
10846                Self::ENCODED_LEN,
10847                __tmp.remaining(),
10848            )
10849        }
10850        __tmp.put_u64_le(self.time_usec);
10851        __tmp.put_f32_le(self.vel_ratio);
10852        __tmp.put_f32_le(self.pos_horiz_ratio);
10853        __tmp.put_f32_le(self.pos_vert_ratio);
10854        __tmp.put_f32_le(self.mag_ratio);
10855        __tmp.put_f32_le(self.hagl_ratio);
10856        __tmp.put_f32_le(self.tas_ratio);
10857        __tmp.put_f32_le(self.pos_horiz_accuracy);
10858        __tmp.put_f32_le(self.pos_vert_accuracy);
10859        __tmp.put_u16_le(self.flags.bits());
10860        if matches!(version, MavlinkVersion::V2) {
10861            let len = __tmp.len();
10862            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
10863        } else {
10864            __tmp.len()
10865        }
10866    }
10867}
10868#[doc = "id: 410"]
10869#[doc = "Event message. Each new event from a particular component gets a new sequence number. The same message might be sent multiple times if (re-)requested. Most events are broadcast, some can be specific to a target component (as receivers keep track of the sequence for missed events, all events need to be broadcast. Thus we use destination_component instead of target_component)."]
10870#[derive(Debug, Clone, PartialEq)]
10871#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10872#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10873pub struct EVENT_DATA {
10874    #[doc = "Event ID (as defined in the component metadata)"]
10875    pub id: u32,
10876    #[doc = "Timestamp (time since system boot when the event happened)."]
10877    pub event_time_boot_ms: u32,
10878    #[doc = "Sequence number."]
10879    pub sequence: u16,
10880    #[doc = "Component ID"]
10881    pub destination_component: u8,
10882    #[doc = "System ID"]
10883    pub destination_system: u8,
10884    #[doc = "Log levels: 4 bits MSB: internal (for logging purposes), 4 bits LSB: external. Levels: Emergency = 0, Alert = 1, Critical = 2, Error = 3, Warning = 4, Notice = 5, Info = 6, Debug = 7, Protocol = 8, Disabled = 9"]
10885    pub log_levels: u8,
10886    #[doc = "Arguments (depend on event ID)."]
10887    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
10888    pub arguments: [u8; 40],
10889}
10890impl EVENT_DATA {
10891    pub const ENCODED_LEN: usize = 53usize;
10892    pub const DEFAULT: Self = Self {
10893        id: 0_u32,
10894        event_time_boot_ms: 0_u32,
10895        sequence: 0_u16,
10896        destination_component: 0_u8,
10897        destination_system: 0_u8,
10898        log_levels: 0_u8,
10899        arguments: [0_u8; 40usize],
10900    };
10901    #[cfg(feature = "arbitrary")]
10902    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
10903        use arbitrary::{Arbitrary, Unstructured};
10904        let mut buf = [0u8; 1024];
10905        rng.fill_bytes(&mut buf);
10906        let mut unstructured = Unstructured::new(&buf);
10907        Self::arbitrary(&mut unstructured).unwrap_or_default()
10908    }
10909}
10910impl Default for EVENT_DATA {
10911    fn default() -> Self {
10912        Self::DEFAULT.clone()
10913    }
10914}
10915impl MessageData for EVENT_DATA {
10916    type Message = MavMessage;
10917    const ID: u32 = 410u32;
10918    const NAME: &'static str = "EVENT";
10919    const EXTRA_CRC: u8 = 160u8;
10920    const ENCODED_LEN: usize = 53usize;
10921    fn deser(
10922        _version: MavlinkVersion,
10923        __input: &[u8],
10924    ) -> Result<Self, ::mavlink_core::error::ParserError> {
10925        let avail_len = __input.len();
10926        let mut payload_buf = [0; Self::ENCODED_LEN];
10927        let mut buf = if avail_len < Self::ENCODED_LEN {
10928            payload_buf[0..avail_len].copy_from_slice(__input);
10929            Bytes::new(&payload_buf)
10930        } else {
10931            Bytes::new(__input)
10932        };
10933        let mut __struct = Self::default();
10934        __struct.id = buf.get_u32_le();
10935        __struct.event_time_boot_ms = buf.get_u32_le();
10936        __struct.sequence = buf.get_u16_le();
10937        __struct.destination_component = buf.get_u8();
10938        __struct.destination_system = buf.get_u8();
10939        __struct.log_levels = buf.get_u8();
10940        for v in &mut __struct.arguments {
10941            let val = buf.get_u8();
10942            *v = val;
10943        }
10944        Ok(__struct)
10945    }
10946    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
10947        let mut __tmp = BytesMut::new(bytes);
10948        #[allow(clippy::absurd_extreme_comparisons)]
10949        #[allow(unused_comparisons)]
10950        if __tmp.remaining() < Self::ENCODED_LEN {
10951            panic!(
10952                "buffer is too small (need {} bytes, but got {})",
10953                Self::ENCODED_LEN,
10954                __tmp.remaining(),
10955            )
10956        }
10957        __tmp.put_u32_le(self.id);
10958        __tmp.put_u32_le(self.event_time_boot_ms);
10959        __tmp.put_u16_le(self.sequence);
10960        __tmp.put_u8(self.destination_component);
10961        __tmp.put_u8(self.destination_system);
10962        __tmp.put_u8(self.log_levels);
10963        for val in &self.arguments {
10964            __tmp.put_u8(*val);
10965        }
10966        if matches!(version, MavlinkVersion::V2) {
10967            let len = __tmp.len();
10968            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
10969        } else {
10970            __tmp.len()
10971        }
10972    }
10973}
10974#[doc = "id: 245"]
10975#[doc = "Provides state for additional features."]
10976#[derive(Debug, Clone, PartialEq)]
10977#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10978#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10979pub struct EXTENDED_SYS_STATE_DATA {
10980    #[doc = "The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration."]
10981    pub vtol_state: MavVtolState,
10982    #[doc = "The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown."]
10983    pub landed_state: MavLandedState,
10984}
10985impl EXTENDED_SYS_STATE_DATA {
10986    pub const ENCODED_LEN: usize = 2usize;
10987    pub const DEFAULT: Self = Self {
10988        vtol_state: MavVtolState::DEFAULT,
10989        landed_state: MavLandedState::DEFAULT,
10990    };
10991    #[cfg(feature = "arbitrary")]
10992    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
10993        use arbitrary::{Arbitrary, Unstructured};
10994        let mut buf = [0u8; 1024];
10995        rng.fill_bytes(&mut buf);
10996        let mut unstructured = Unstructured::new(&buf);
10997        Self::arbitrary(&mut unstructured).unwrap_or_default()
10998    }
10999}
11000impl Default for EXTENDED_SYS_STATE_DATA {
11001    fn default() -> Self {
11002        Self::DEFAULT.clone()
11003    }
11004}
11005impl MessageData for EXTENDED_SYS_STATE_DATA {
11006    type Message = MavMessage;
11007    const ID: u32 = 245u32;
11008    const NAME: &'static str = "EXTENDED_SYS_STATE";
11009    const EXTRA_CRC: u8 = 130u8;
11010    const ENCODED_LEN: usize = 2usize;
11011    fn deser(
11012        _version: MavlinkVersion,
11013        __input: &[u8],
11014    ) -> Result<Self, ::mavlink_core::error::ParserError> {
11015        let avail_len = __input.len();
11016        let mut payload_buf = [0; Self::ENCODED_LEN];
11017        let mut buf = if avail_len < Self::ENCODED_LEN {
11018            payload_buf[0..avail_len].copy_from_slice(__input);
11019            Bytes::new(&payload_buf)
11020        } else {
11021            Bytes::new(__input)
11022        };
11023        let mut __struct = Self::default();
11024        let tmp = buf.get_u8();
11025        __struct.vtol_state =
11026            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
11027                enum_type: "MavVtolState",
11028                value: tmp as u32,
11029            })?;
11030        let tmp = buf.get_u8();
11031        __struct.landed_state =
11032            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
11033                enum_type: "MavLandedState",
11034                value: tmp as u32,
11035            })?;
11036        Ok(__struct)
11037    }
11038    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
11039        let mut __tmp = BytesMut::new(bytes);
11040        #[allow(clippy::absurd_extreme_comparisons)]
11041        #[allow(unused_comparisons)]
11042        if __tmp.remaining() < Self::ENCODED_LEN {
11043            panic!(
11044                "buffer is too small (need {} bytes, but got {})",
11045                Self::ENCODED_LEN,
11046                __tmp.remaining(),
11047            )
11048        }
11049        __tmp.put_u8(self.vtol_state as u8);
11050        __tmp.put_u8(self.landed_state as u8);
11051        if matches!(version, MavlinkVersion::V2) {
11052            let len = __tmp.len();
11053            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
11054        } else {
11055            __tmp.len()
11056        }
11057    }
11058}
11059#[doc = "id: 162"]
11060#[doc = "Status of geo-fencing. Sent in extended status stream when fencing enabled."]
11061#[derive(Debug, Clone, PartialEq)]
11062#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11063#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11064pub struct FENCE_STATUS_DATA {
11065    #[doc = "Time (since boot) of last breach."]
11066    pub breach_time: u32,
11067    #[doc = "Number of fence breaches."]
11068    pub breach_count: u16,
11069    #[doc = "Breach status (0 if currently inside fence, 1 if outside)."]
11070    pub breach_status: u8,
11071    #[doc = "Last breach type."]
11072    pub breach_type: FenceBreach,
11073    #[doc = "Active action to prevent fence breach"]
11074    #[cfg_attr(feature = "serde", serde(default))]
11075    pub breach_mitigation: FenceMitigate,
11076}
11077impl FENCE_STATUS_DATA {
11078    pub const ENCODED_LEN: usize = 9usize;
11079    pub const DEFAULT: Self = Self {
11080        breach_time: 0_u32,
11081        breach_count: 0_u16,
11082        breach_status: 0_u8,
11083        breach_type: FenceBreach::DEFAULT,
11084        breach_mitigation: FenceMitigate::DEFAULT,
11085    };
11086    #[cfg(feature = "arbitrary")]
11087    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
11088        use arbitrary::{Arbitrary, Unstructured};
11089        let mut buf = [0u8; 1024];
11090        rng.fill_bytes(&mut buf);
11091        let mut unstructured = Unstructured::new(&buf);
11092        Self::arbitrary(&mut unstructured).unwrap_or_default()
11093    }
11094}
11095impl Default for FENCE_STATUS_DATA {
11096    fn default() -> Self {
11097        Self::DEFAULT.clone()
11098    }
11099}
11100impl MessageData for FENCE_STATUS_DATA {
11101    type Message = MavMessage;
11102    const ID: u32 = 162u32;
11103    const NAME: &'static str = "FENCE_STATUS";
11104    const EXTRA_CRC: u8 = 189u8;
11105    const ENCODED_LEN: usize = 9usize;
11106    fn deser(
11107        _version: MavlinkVersion,
11108        __input: &[u8],
11109    ) -> Result<Self, ::mavlink_core::error::ParserError> {
11110        let avail_len = __input.len();
11111        let mut payload_buf = [0; Self::ENCODED_LEN];
11112        let mut buf = if avail_len < Self::ENCODED_LEN {
11113            payload_buf[0..avail_len].copy_from_slice(__input);
11114            Bytes::new(&payload_buf)
11115        } else {
11116            Bytes::new(__input)
11117        };
11118        let mut __struct = Self::default();
11119        __struct.breach_time = buf.get_u32_le();
11120        __struct.breach_count = buf.get_u16_le();
11121        __struct.breach_status = buf.get_u8();
11122        let tmp = buf.get_u8();
11123        __struct.breach_type =
11124            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
11125                enum_type: "FenceBreach",
11126                value: tmp as u32,
11127            })?;
11128        let tmp = buf.get_u8();
11129        __struct.breach_mitigation =
11130            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
11131                enum_type: "FenceMitigate",
11132                value: tmp as u32,
11133            })?;
11134        Ok(__struct)
11135    }
11136    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
11137        let mut __tmp = BytesMut::new(bytes);
11138        #[allow(clippy::absurd_extreme_comparisons)]
11139        #[allow(unused_comparisons)]
11140        if __tmp.remaining() < Self::ENCODED_LEN {
11141            panic!(
11142                "buffer is too small (need {} bytes, but got {})",
11143                Self::ENCODED_LEN,
11144                __tmp.remaining(),
11145            )
11146        }
11147        __tmp.put_u32_le(self.breach_time);
11148        __tmp.put_u16_le(self.breach_count);
11149        __tmp.put_u8(self.breach_status);
11150        __tmp.put_u8(self.breach_type as u8);
11151        __tmp.put_u8(self.breach_mitigation as u8);
11152        if matches!(version, MavlinkVersion::V2) {
11153            let len = __tmp.len();
11154            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
11155        } else {
11156            __tmp.len()
11157        }
11158    }
11159}
11160#[doc = "id: 110"]
11161#[doc = "File transfer protocol message: <https://mavlink.io/en/services/ftp.html>."]
11162#[derive(Debug, Clone, PartialEq)]
11163#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11164#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11165pub struct FILE_TRANSFER_PROTOCOL_DATA {
11166    #[doc = "Network ID (0 for broadcast)"]
11167    pub target_network: u8,
11168    #[doc = "System ID (0 for broadcast)"]
11169    pub target_system: u8,
11170    #[doc = "Component ID (0 for broadcast)"]
11171    pub target_component: u8,
11172    #[doc = "Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The content/format of this block is defined in <https://mavlink.io/en/services/ftp.html>."]
11173    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
11174    pub payload: [u8; 251],
11175}
11176impl FILE_TRANSFER_PROTOCOL_DATA {
11177    pub const ENCODED_LEN: usize = 254usize;
11178    pub const DEFAULT: Self = Self {
11179        target_network: 0_u8,
11180        target_system: 0_u8,
11181        target_component: 0_u8,
11182        payload: [0_u8; 251usize],
11183    };
11184    #[cfg(feature = "arbitrary")]
11185    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
11186        use arbitrary::{Arbitrary, Unstructured};
11187        let mut buf = [0u8; 1024];
11188        rng.fill_bytes(&mut buf);
11189        let mut unstructured = Unstructured::new(&buf);
11190        Self::arbitrary(&mut unstructured).unwrap_or_default()
11191    }
11192}
11193impl Default for FILE_TRANSFER_PROTOCOL_DATA {
11194    fn default() -> Self {
11195        Self::DEFAULT.clone()
11196    }
11197}
11198impl MessageData for FILE_TRANSFER_PROTOCOL_DATA {
11199    type Message = MavMessage;
11200    const ID: u32 = 110u32;
11201    const NAME: &'static str = "FILE_TRANSFER_PROTOCOL";
11202    const EXTRA_CRC: u8 = 84u8;
11203    const ENCODED_LEN: usize = 254usize;
11204    fn deser(
11205        _version: MavlinkVersion,
11206        __input: &[u8],
11207    ) -> Result<Self, ::mavlink_core::error::ParserError> {
11208        let avail_len = __input.len();
11209        let mut payload_buf = [0; Self::ENCODED_LEN];
11210        let mut buf = if avail_len < Self::ENCODED_LEN {
11211            payload_buf[0..avail_len].copy_from_slice(__input);
11212            Bytes::new(&payload_buf)
11213        } else {
11214            Bytes::new(__input)
11215        };
11216        let mut __struct = Self::default();
11217        __struct.target_network = buf.get_u8();
11218        __struct.target_system = buf.get_u8();
11219        __struct.target_component = buf.get_u8();
11220        for v in &mut __struct.payload {
11221            let val = buf.get_u8();
11222            *v = val;
11223        }
11224        Ok(__struct)
11225    }
11226    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
11227        let mut __tmp = BytesMut::new(bytes);
11228        #[allow(clippy::absurd_extreme_comparisons)]
11229        #[allow(unused_comparisons)]
11230        if __tmp.remaining() < Self::ENCODED_LEN {
11231            panic!(
11232                "buffer is too small (need {} bytes, but got {})",
11233                Self::ENCODED_LEN,
11234                __tmp.remaining(),
11235            )
11236        }
11237        __tmp.put_u8(self.target_network);
11238        __tmp.put_u8(self.target_system);
11239        __tmp.put_u8(self.target_component);
11240        for val in &self.payload {
11241            __tmp.put_u8(*val);
11242        }
11243        if matches!(version, MavlinkVersion::V2) {
11244            let len = __tmp.len();
11245            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
11246        } else {
11247            __tmp.len()
11248        }
11249    }
11250}
11251#[doc = "id: 264"]
11252#[doc = "Flight information.         This includes time since boot for arm, takeoff, and land, and a flight number.         Takeoff and landing values reset to zero on arm.         This can be requested using MAV_CMD_REQUEST_MESSAGE.         Note, some fields are misnamed - timestamps are from boot (not UTC) and the flight_uuid is a sequence number."]
11253#[derive(Debug, Clone, PartialEq)]
11254#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11255#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11256pub struct FLIGHT_INFORMATION_DATA {
11257    #[doc = "Timestamp at arming (since system boot). Set to 0 on boot. Set value on arming. Note, field is misnamed UTC."]
11258    pub arming_time_utc: u64,
11259    #[doc = "Timestamp at takeoff (since system boot). Set to 0 at boot and on arming. Note, field is misnamed UTC."]
11260    pub takeoff_time_utc: u64,
11261    #[doc = "Flight number. Note, field is misnamed UUID."]
11262    pub flight_uuid: u64,
11263    #[doc = "Timestamp (time since system boot)."]
11264    pub time_boot_ms: u32,
11265    #[doc = "Timestamp at landing (in ms since system boot). Set to 0 at boot and on arming."]
11266    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
11267    pub landing_time: u32,
11268}
11269impl FLIGHT_INFORMATION_DATA {
11270    pub const ENCODED_LEN: usize = 32usize;
11271    pub const DEFAULT: Self = Self {
11272        arming_time_utc: 0_u64,
11273        takeoff_time_utc: 0_u64,
11274        flight_uuid: 0_u64,
11275        time_boot_ms: 0_u32,
11276        landing_time: 0_u32,
11277    };
11278    #[cfg(feature = "arbitrary")]
11279    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
11280        use arbitrary::{Arbitrary, Unstructured};
11281        let mut buf = [0u8; 1024];
11282        rng.fill_bytes(&mut buf);
11283        let mut unstructured = Unstructured::new(&buf);
11284        Self::arbitrary(&mut unstructured).unwrap_or_default()
11285    }
11286}
11287impl Default for FLIGHT_INFORMATION_DATA {
11288    fn default() -> Self {
11289        Self::DEFAULT.clone()
11290    }
11291}
11292impl MessageData for FLIGHT_INFORMATION_DATA {
11293    type Message = MavMessage;
11294    const ID: u32 = 264u32;
11295    const NAME: &'static str = "FLIGHT_INFORMATION";
11296    const EXTRA_CRC: u8 = 49u8;
11297    const ENCODED_LEN: usize = 32usize;
11298    fn deser(
11299        _version: MavlinkVersion,
11300        __input: &[u8],
11301    ) -> Result<Self, ::mavlink_core::error::ParserError> {
11302        let avail_len = __input.len();
11303        let mut payload_buf = [0; Self::ENCODED_LEN];
11304        let mut buf = if avail_len < Self::ENCODED_LEN {
11305            payload_buf[0..avail_len].copy_from_slice(__input);
11306            Bytes::new(&payload_buf)
11307        } else {
11308            Bytes::new(__input)
11309        };
11310        let mut __struct = Self::default();
11311        __struct.arming_time_utc = buf.get_u64_le();
11312        __struct.takeoff_time_utc = buf.get_u64_le();
11313        __struct.flight_uuid = buf.get_u64_le();
11314        __struct.time_boot_ms = buf.get_u32_le();
11315        __struct.landing_time = buf.get_u32_le();
11316        Ok(__struct)
11317    }
11318    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
11319        let mut __tmp = BytesMut::new(bytes);
11320        #[allow(clippy::absurd_extreme_comparisons)]
11321        #[allow(unused_comparisons)]
11322        if __tmp.remaining() < Self::ENCODED_LEN {
11323            panic!(
11324                "buffer is too small (need {} bytes, but got {})",
11325                Self::ENCODED_LEN,
11326                __tmp.remaining(),
11327            )
11328        }
11329        __tmp.put_u64_le(self.arming_time_utc);
11330        __tmp.put_u64_le(self.takeoff_time_utc);
11331        __tmp.put_u64_le(self.flight_uuid);
11332        __tmp.put_u32_le(self.time_boot_ms);
11333        __tmp.put_u32_le(self.landing_time);
11334        if matches!(version, MavlinkVersion::V2) {
11335            let len = __tmp.len();
11336            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
11337        } else {
11338            __tmp.len()
11339        }
11340    }
11341}
11342#[doc = "id: 144"]
11343#[doc = "Current motion information from a designated system."]
11344#[derive(Debug, Clone, PartialEq)]
11345#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11346#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11347pub struct FOLLOW_TARGET_DATA {
11348    #[doc = "Timestamp (time since system boot)."]
11349    pub timestamp: u64,
11350    #[doc = "button states or switches of a tracker device"]
11351    pub custom_state: u64,
11352    #[doc = "Latitude (WGS84)"]
11353    pub lat: i32,
11354    #[doc = "Longitude (WGS84)"]
11355    pub lon: i32,
11356    #[doc = "Altitude (MSL)"]
11357    pub alt: f32,
11358    #[doc = "target velocity (0,0,0) for unknown"]
11359    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
11360    pub vel: [f32; 3],
11361    #[doc = "linear target acceleration (0,0,0) for unknown"]
11362    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
11363    pub acc: [f32; 3],
11364    #[doc = "(0 0 0 0 for unknown)"]
11365    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
11366    pub attitude_q: [f32; 4],
11367    #[doc = "(0 0 0 for unknown)"]
11368    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
11369    pub rates: [f32; 3],
11370    #[doc = "eph epv"]
11371    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
11372    pub position_cov: [f32; 3],
11373    #[doc = "bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3)"]
11374    pub est_capabilities: u8,
11375}
11376impl FOLLOW_TARGET_DATA {
11377    pub const ENCODED_LEN: usize = 93usize;
11378    pub const DEFAULT: Self = Self {
11379        timestamp: 0_u64,
11380        custom_state: 0_u64,
11381        lat: 0_i32,
11382        lon: 0_i32,
11383        alt: 0.0_f32,
11384        vel: [0.0_f32; 3usize],
11385        acc: [0.0_f32; 3usize],
11386        attitude_q: [0.0_f32; 4usize],
11387        rates: [0.0_f32; 3usize],
11388        position_cov: [0.0_f32; 3usize],
11389        est_capabilities: 0_u8,
11390    };
11391    #[cfg(feature = "arbitrary")]
11392    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
11393        use arbitrary::{Arbitrary, Unstructured};
11394        let mut buf = [0u8; 1024];
11395        rng.fill_bytes(&mut buf);
11396        let mut unstructured = Unstructured::new(&buf);
11397        Self::arbitrary(&mut unstructured).unwrap_or_default()
11398    }
11399}
11400impl Default for FOLLOW_TARGET_DATA {
11401    fn default() -> Self {
11402        Self::DEFAULT.clone()
11403    }
11404}
11405impl MessageData for FOLLOW_TARGET_DATA {
11406    type Message = MavMessage;
11407    const ID: u32 = 144u32;
11408    const NAME: &'static str = "FOLLOW_TARGET";
11409    const EXTRA_CRC: u8 = 127u8;
11410    const ENCODED_LEN: usize = 93usize;
11411    fn deser(
11412        _version: MavlinkVersion,
11413        __input: &[u8],
11414    ) -> Result<Self, ::mavlink_core::error::ParserError> {
11415        let avail_len = __input.len();
11416        let mut payload_buf = [0; Self::ENCODED_LEN];
11417        let mut buf = if avail_len < Self::ENCODED_LEN {
11418            payload_buf[0..avail_len].copy_from_slice(__input);
11419            Bytes::new(&payload_buf)
11420        } else {
11421            Bytes::new(__input)
11422        };
11423        let mut __struct = Self::default();
11424        __struct.timestamp = buf.get_u64_le();
11425        __struct.custom_state = buf.get_u64_le();
11426        __struct.lat = buf.get_i32_le();
11427        __struct.lon = buf.get_i32_le();
11428        __struct.alt = buf.get_f32_le();
11429        for v in &mut __struct.vel {
11430            let val = buf.get_f32_le();
11431            *v = val;
11432        }
11433        for v in &mut __struct.acc {
11434            let val = buf.get_f32_le();
11435            *v = val;
11436        }
11437        for v in &mut __struct.attitude_q {
11438            let val = buf.get_f32_le();
11439            *v = val;
11440        }
11441        for v in &mut __struct.rates {
11442            let val = buf.get_f32_le();
11443            *v = val;
11444        }
11445        for v in &mut __struct.position_cov {
11446            let val = buf.get_f32_le();
11447            *v = val;
11448        }
11449        __struct.est_capabilities = buf.get_u8();
11450        Ok(__struct)
11451    }
11452    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
11453        let mut __tmp = BytesMut::new(bytes);
11454        #[allow(clippy::absurd_extreme_comparisons)]
11455        #[allow(unused_comparisons)]
11456        if __tmp.remaining() < Self::ENCODED_LEN {
11457            panic!(
11458                "buffer is too small (need {} bytes, but got {})",
11459                Self::ENCODED_LEN,
11460                __tmp.remaining(),
11461            )
11462        }
11463        __tmp.put_u64_le(self.timestamp);
11464        __tmp.put_u64_le(self.custom_state);
11465        __tmp.put_i32_le(self.lat);
11466        __tmp.put_i32_le(self.lon);
11467        __tmp.put_f32_le(self.alt);
11468        for val in &self.vel {
11469            __tmp.put_f32_le(*val);
11470        }
11471        for val in &self.acc {
11472            __tmp.put_f32_le(*val);
11473        }
11474        for val in &self.attitude_q {
11475            __tmp.put_f32_le(*val);
11476        }
11477        for val in &self.rates {
11478            __tmp.put_f32_le(*val);
11479        }
11480        for val in &self.position_cov {
11481            __tmp.put_f32_le(*val);
11482        }
11483        __tmp.put_u8(self.est_capabilities);
11484        if matches!(version, MavlinkVersion::V2) {
11485            let len = __tmp.len();
11486            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
11487        } else {
11488            __tmp.len()
11489        }
11490    }
11491}
11492#[doc = "id: 371"]
11493#[doc = "Fuel status.         This message provides \"generic\" fuel level information for  in a GCS and for triggering failsafes in an autopilot.         The fuel type and associated units for fields in this message are defined in the enum MAV_FUEL_TYPE.          The reported `consumed_fuel` and `remaining_fuel` must only be supplied if measured: they must not be inferred from the `maximum_fuel` and the other value.         A recipient can assume that if these fields are supplied they are accurate.         If not provided, the recipient can infer `remaining_fuel` from `maximum_fuel` and `consumed_fuel` on the assumption that the fuel was initially at its maximum (this is what battery monitors assume).         Note however that this is an assumption, and the UI should prompt the user appropriately (i.e. notify user that they should fill the tank before boot).          This kind of information may also be sent in fuel-specific messages such as BATTERY_STATUS_V2.         If both messages are sent for the same fuel system, the ids and corresponding information must match.          This should be streamed (nominally at 0.1 Hz)."]
11494#[derive(Debug, Clone, PartialEq)]
11495#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11496#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11497pub struct FUEL_STATUS_DATA {
11498    #[doc = "Capacity when full. Must be provided."]
11499    pub maximum_fuel: f32,
11500    #[doc = "Consumed fuel (measured). This value should not be inferred: if not measured set to NaN. NaN: field not provided."]
11501    pub consumed_fuel: f32,
11502    #[doc = "Remaining fuel until empty (measured). The value should not be inferred: if not measured set to NaN. NaN: field not provided."]
11503    pub remaining_fuel: f32,
11504    #[doc = "Positive value when emptying/using, and negative if filling/replacing. NaN: field not provided."]
11505    pub flow_rate: f32,
11506    #[doc = "Fuel temperature. NaN: field not provided."]
11507    pub temperature: f32,
11508    #[doc = "Fuel type. Defines units for fuel capacity and consumption fields above."]
11509    pub fuel_type: MavFuelType,
11510    #[doc = "Fuel ID. Must match ID of other messages for same fuel system, such as BATTERY_STATUS_V2."]
11511    pub id: u8,
11512    #[doc = "Percentage of remaining fuel, relative to full. Values: [0-100], UINT8_MAX: field not provided."]
11513    pub percent_remaining: u8,
11514}
11515impl FUEL_STATUS_DATA {
11516    pub const ENCODED_LEN: usize = 26usize;
11517    pub const DEFAULT: Self = Self {
11518        maximum_fuel: 0.0_f32,
11519        consumed_fuel: 0.0_f32,
11520        remaining_fuel: 0.0_f32,
11521        flow_rate: 0.0_f32,
11522        temperature: 0.0_f32,
11523        fuel_type: MavFuelType::DEFAULT,
11524        id: 0_u8,
11525        percent_remaining: 0_u8,
11526    };
11527    #[cfg(feature = "arbitrary")]
11528    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
11529        use arbitrary::{Arbitrary, Unstructured};
11530        let mut buf = [0u8; 1024];
11531        rng.fill_bytes(&mut buf);
11532        let mut unstructured = Unstructured::new(&buf);
11533        Self::arbitrary(&mut unstructured).unwrap_or_default()
11534    }
11535}
11536impl Default for FUEL_STATUS_DATA {
11537    fn default() -> Self {
11538        Self::DEFAULT.clone()
11539    }
11540}
11541impl MessageData for FUEL_STATUS_DATA {
11542    type Message = MavMessage;
11543    const ID: u32 = 371u32;
11544    const NAME: &'static str = "FUEL_STATUS";
11545    const EXTRA_CRC: u8 = 10u8;
11546    const ENCODED_LEN: usize = 26usize;
11547    fn deser(
11548        _version: MavlinkVersion,
11549        __input: &[u8],
11550    ) -> Result<Self, ::mavlink_core::error::ParserError> {
11551        let avail_len = __input.len();
11552        let mut payload_buf = [0; Self::ENCODED_LEN];
11553        let mut buf = if avail_len < Self::ENCODED_LEN {
11554            payload_buf[0..avail_len].copy_from_slice(__input);
11555            Bytes::new(&payload_buf)
11556        } else {
11557            Bytes::new(__input)
11558        };
11559        let mut __struct = Self::default();
11560        __struct.maximum_fuel = buf.get_f32_le();
11561        __struct.consumed_fuel = buf.get_f32_le();
11562        __struct.remaining_fuel = buf.get_f32_le();
11563        __struct.flow_rate = buf.get_f32_le();
11564        __struct.temperature = buf.get_f32_le();
11565        let tmp = buf.get_u32_le();
11566        __struct.fuel_type = FromPrimitive::from_u32(tmp).ok_or(
11567            ::mavlink_core::error::ParserError::InvalidEnum {
11568                enum_type: "MavFuelType",
11569                value: tmp as u32,
11570            },
11571        )?;
11572        __struct.id = buf.get_u8();
11573        __struct.percent_remaining = buf.get_u8();
11574        Ok(__struct)
11575    }
11576    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
11577        let mut __tmp = BytesMut::new(bytes);
11578        #[allow(clippy::absurd_extreme_comparisons)]
11579        #[allow(unused_comparisons)]
11580        if __tmp.remaining() < Self::ENCODED_LEN {
11581            panic!(
11582                "buffer is too small (need {} bytes, but got {})",
11583                Self::ENCODED_LEN,
11584                __tmp.remaining(),
11585            )
11586        }
11587        __tmp.put_f32_le(self.maximum_fuel);
11588        __tmp.put_f32_le(self.consumed_fuel);
11589        __tmp.put_f32_le(self.remaining_fuel);
11590        __tmp.put_f32_le(self.flow_rate);
11591        __tmp.put_f32_le(self.temperature);
11592        __tmp.put_u32_le(self.fuel_type as u32);
11593        __tmp.put_u8(self.id);
11594        __tmp.put_u8(self.percent_remaining);
11595        if matches!(version, MavlinkVersion::V2) {
11596            let len = __tmp.len();
11597            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
11598        } else {
11599            __tmp.len()
11600        }
11601    }
11602}
11603#[doc = "id: 373"]
11604#[doc = "Telemetry of power generation system. Alternator or mechanical generator."]
11605#[derive(Debug, Clone, PartialEq)]
11606#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11607#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11608pub struct GENERATOR_STATUS_DATA {
11609    #[doc = "Status flags."]
11610    pub status: MavGeneratorStatusFlag,
11611    #[doc = "Current into/out of battery. Positive for out. Negative for in. NaN: field not provided."]
11612    pub battery_current: f32,
11613    #[doc = "Current going to the UAV. If battery current not available this is the DC current from the generator. Positive for out. Negative for in. NaN: field not provided"]
11614    pub load_current: f32,
11615    #[doc = "The power being generated. NaN: field not provided"]
11616    pub power_generated: f32,
11617    #[doc = "Voltage of the bus seen at the generator, or battery bus if battery bus is controlled by generator and at a different voltage to main bus."]
11618    pub bus_voltage: f32,
11619    #[doc = "The target battery current. Positive for out. Negative for in. NaN: field not provided"]
11620    pub bat_current_setpoint: f32,
11621    #[doc = "Seconds this generator has run since it was rebooted. UINT32_MAX: field not provided."]
11622    pub runtime: u32,
11623    #[doc = "Seconds until this generator requires maintenance.  A negative value indicates maintenance is past-due. INT32_MAX: field not provided."]
11624    pub time_until_maintenance: i32,
11625    #[doc = "Speed of electrical generator or alternator. UINT16_MAX: field not provided."]
11626    pub generator_speed: u16,
11627    #[doc = "The temperature of the rectifier or power converter. INT16_MAX: field not provided."]
11628    pub rectifier_temperature: i16,
11629    #[doc = "The temperature of the mechanical motor, fuel cell core or generator. INT16_MAX: field not provided."]
11630    pub generator_temperature: i16,
11631}
11632impl GENERATOR_STATUS_DATA {
11633    pub const ENCODED_LEN: usize = 42usize;
11634    pub const DEFAULT: Self = Self {
11635        status: MavGeneratorStatusFlag::DEFAULT,
11636        battery_current: 0.0_f32,
11637        load_current: 0.0_f32,
11638        power_generated: 0.0_f32,
11639        bus_voltage: 0.0_f32,
11640        bat_current_setpoint: 0.0_f32,
11641        runtime: 0_u32,
11642        time_until_maintenance: 0_i32,
11643        generator_speed: 0_u16,
11644        rectifier_temperature: 0_i16,
11645        generator_temperature: 0_i16,
11646    };
11647    #[cfg(feature = "arbitrary")]
11648    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
11649        use arbitrary::{Arbitrary, Unstructured};
11650        let mut buf = [0u8; 1024];
11651        rng.fill_bytes(&mut buf);
11652        let mut unstructured = Unstructured::new(&buf);
11653        Self::arbitrary(&mut unstructured).unwrap_or_default()
11654    }
11655}
11656impl Default for GENERATOR_STATUS_DATA {
11657    fn default() -> Self {
11658        Self::DEFAULT.clone()
11659    }
11660}
11661impl MessageData for GENERATOR_STATUS_DATA {
11662    type Message = MavMessage;
11663    const ID: u32 = 373u32;
11664    const NAME: &'static str = "GENERATOR_STATUS";
11665    const EXTRA_CRC: u8 = 117u8;
11666    const ENCODED_LEN: usize = 42usize;
11667    fn deser(
11668        _version: MavlinkVersion,
11669        __input: &[u8],
11670    ) -> Result<Self, ::mavlink_core::error::ParserError> {
11671        let avail_len = __input.len();
11672        let mut payload_buf = [0; Self::ENCODED_LEN];
11673        let mut buf = if avail_len < Self::ENCODED_LEN {
11674            payload_buf[0..avail_len].copy_from_slice(__input);
11675            Bytes::new(&payload_buf)
11676        } else {
11677            Bytes::new(__input)
11678        };
11679        let mut __struct = Self::default();
11680        let tmp = buf.get_u64_le();
11681        __struct.status = MavGeneratorStatusFlag::from_bits(
11682            tmp & MavGeneratorStatusFlag::all().bits(),
11683        )
11684        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
11685            flag_type: "MavGeneratorStatusFlag",
11686            value: tmp as u32,
11687        })?;
11688        __struct.battery_current = buf.get_f32_le();
11689        __struct.load_current = buf.get_f32_le();
11690        __struct.power_generated = buf.get_f32_le();
11691        __struct.bus_voltage = buf.get_f32_le();
11692        __struct.bat_current_setpoint = buf.get_f32_le();
11693        __struct.runtime = buf.get_u32_le();
11694        __struct.time_until_maintenance = buf.get_i32_le();
11695        __struct.generator_speed = buf.get_u16_le();
11696        __struct.rectifier_temperature = buf.get_i16_le();
11697        __struct.generator_temperature = buf.get_i16_le();
11698        Ok(__struct)
11699    }
11700    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
11701        let mut __tmp = BytesMut::new(bytes);
11702        #[allow(clippy::absurd_extreme_comparisons)]
11703        #[allow(unused_comparisons)]
11704        if __tmp.remaining() < Self::ENCODED_LEN {
11705            panic!(
11706                "buffer is too small (need {} bytes, but got {})",
11707                Self::ENCODED_LEN,
11708                __tmp.remaining(),
11709            )
11710        }
11711        __tmp.put_u64_le(self.status.bits());
11712        __tmp.put_f32_le(self.battery_current);
11713        __tmp.put_f32_le(self.load_current);
11714        __tmp.put_f32_le(self.power_generated);
11715        __tmp.put_f32_le(self.bus_voltage);
11716        __tmp.put_f32_le(self.bat_current_setpoint);
11717        __tmp.put_u32_le(self.runtime);
11718        __tmp.put_i32_le(self.time_until_maintenance);
11719        __tmp.put_u16_le(self.generator_speed);
11720        __tmp.put_i16_le(self.rectifier_temperature);
11721        __tmp.put_i16_le(self.generator_temperature);
11722        if matches!(version, MavlinkVersion::V2) {
11723            let len = __tmp.len();
11724            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
11725        } else {
11726            __tmp.len()
11727        }
11728    }
11729}
11730#[doc = "id: 285"]
11731#[doc = "Message reporting the status of a gimbal device. \t  This message should be broadcast by a gimbal device component at a low regular rate (e.g. 5 Hz). \t  For the angles encoded in the quaternion and the angular velocities holds: \t  If the flag GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME is set, then they are relative to the vehicle heading (vehicle frame). \t  If the flag GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME is set, then they are relative to absolute North (earth frame). \t  If neither of these flags are set, then (for backwards compatibility) it holds: \t  If the flag GIMBAL_DEVICE_FLAGS_YAW_LOCK is set, then they are relative to absolute North (earth frame), \t  else they are relative to the vehicle heading (vehicle frame). \t  Other conditions of the flags are not allowed. \t  The quaternion and angular velocities in the other frame can be calculated from delta_yaw and delta_yaw_velocity as \t  q_earth = q_delta_yaw * q_vehicle and w_earth = w_delta_yaw_velocity + w_vehicle (if not NaN). \t  If neither the GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME nor the GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME flag is set, \t  then (for backwards compatibility) the data in the delta_yaw and delta_yaw_velocity fields are to be ignored. \t  New implementations should always set either GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME or GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME, \t  and always should set delta_yaw and delta_yaw_velocity either to the proper value or NaN."]
11732#[derive(Debug, Clone, PartialEq)]
11733#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11734#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11735pub struct GIMBAL_DEVICE_ATTITUDE_STATUS_DATA {
11736    #[doc = "Timestamp (time since system boot)."]
11737    pub time_boot_ms: u32,
11738    #[doc = "Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description."]
11739    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
11740    pub q: [f32; 4],
11741    #[doc = "X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN if unknown."]
11742    pub angular_velocity_x: f32,
11743    #[doc = "Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN if unknown."]
11744    pub angular_velocity_y: f32,
11745    #[doc = "Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN if unknown."]
11746    pub angular_velocity_z: f32,
11747    #[doc = "Failure flags (0 for no failure)"]
11748    pub failure_flags: GimbalDeviceErrorFlags,
11749    #[doc = "Current gimbal flags set."]
11750    pub flags: GimbalDeviceFlags,
11751    #[doc = "System ID"]
11752    pub target_system: u8,
11753    #[doc = "Component ID"]
11754    pub target_component: u8,
11755    #[doc = "Yaw angle relating the quaternions in earth and body frames (see message description). NaN if unknown."]
11756    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
11757    pub delta_yaw: f32,
11758    #[doc = "Yaw angular velocity relating the angular velocities in earth and body frames (see message description). NaN if unknown."]
11759    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
11760    pub delta_yaw_velocity: f32,
11761    #[doc = "This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set a number between 1-6. If the component ID is separate, this field is not required and must be set to 0."]
11762    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
11763    pub gimbal_device_id: u8,
11764}
11765impl GIMBAL_DEVICE_ATTITUDE_STATUS_DATA {
11766    pub const ENCODED_LEN: usize = 49usize;
11767    pub const DEFAULT: Self = Self {
11768        time_boot_ms: 0_u32,
11769        q: [0.0_f32; 4usize],
11770        angular_velocity_x: 0.0_f32,
11771        angular_velocity_y: 0.0_f32,
11772        angular_velocity_z: 0.0_f32,
11773        failure_flags: GimbalDeviceErrorFlags::DEFAULT,
11774        flags: GimbalDeviceFlags::DEFAULT,
11775        target_system: 0_u8,
11776        target_component: 0_u8,
11777        delta_yaw: 0.0_f32,
11778        delta_yaw_velocity: 0.0_f32,
11779        gimbal_device_id: 0_u8,
11780    };
11781    #[cfg(feature = "arbitrary")]
11782    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
11783        use arbitrary::{Arbitrary, Unstructured};
11784        let mut buf = [0u8; 1024];
11785        rng.fill_bytes(&mut buf);
11786        let mut unstructured = Unstructured::new(&buf);
11787        Self::arbitrary(&mut unstructured).unwrap_or_default()
11788    }
11789}
11790impl Default for GIMBAL_DEVICE_ATTITUDE_STATUS_DATA {
11791    fn default() -> Self {
11792        Self::DEFAULT.clone()
11793    }
11794}
11795impl MessageData for GIMBAL_DEVICE_ATTITUDE_STATUS_DATA {
11796    type Message = MavMessage;
11797    const ID: u32 = 285u32;
11798    const NAME: &'static str = "GIMBAL_DEVICE_ATTITUDE_STATUS";
11799    const EXTRA_CRC: u8 = 137u8;
11800    const ENCODED_LEN: usize = 49usize;
11801    fn deser(
11802        _version: MavlinkVersion,
11803        __input: &[u8],
11804    ) -> Result<Self, ::mavlink_core::error::ParserError> {
11805        let avail_len = __input.len();
11806        let mut payload_buf = [0; Self::ENCODED_LEN];
11807        let mut buf = if avail_len < Self::ENCODED_LEN {
11808            payload_buf[0..avail_len].copy_from_slice(__input);
11809            Bytes::new(&payload_buf)
11810        } else {
11811            Bytes::new(__input)
11812        };
11813        let mut __struct = Self::default();
11814        __struct.time_boot_ms = buf.get_u32_le();
11815        for v in &mut __struct.q {
11816            let val = buf.get_f32_le();
11817            *v = val;
11818        }
11819        __struct.angular_velocity_x = buf.get_f32_le();
11820        __struct.angular_velocity_y = buf.get_f32_le();
11821        __struct.angular_velocity_z = buf.get_f32_le();
11822        let tmp = buf.get_u32_le();
11823        __struct.failure_flags = GimbalDeviceErrorFlags::from_bits(
11824            tmp & GimbalDeviceErrorFlags::all().bits(),
11825        )
11826        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
11827            flag_type: "GimbalDeviceErrorFlags",
11828            value: tmp as u32,
11829        })?;
11830        let tmp = buf.get_u16_le();
11831        __struct.flags = GimbalDeviceFlags::from_bits(tmp & GimbalDeviceFlags::all().bits())
11832            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
11833                flag_type: "GimbalDeviceFlags",
11834                value: tmp as u32,
11835            })?;
11836        __struct.target_system = buf.get_u8();
11837        __struct.target_component = buf.get_u8();
11838        __struct.delta_yaw = buf.get_f32_le();
11839        __struct.delta_yaw_velocity = buf.get_f32_le();
11840        __struct.gimbal_device_id = buf.get_u8();
11841        Ok(__struct)
11842    }
11843    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
11844        let mut __tmp = BytesMut::new(bytes);
11845        #[allow(clippy::absurd_extreme_comparisons)]
11846        #[allow(unused_comparisons)]
11847        if __tmp.remaining() < Self::ENCODED_LEN {
11848            panic!(
11849                "buffer is too small (need {} bytes, but got {})",
11850                Self::ENCODED_LEN,
11851                __tmp.remaining(),
11852            )
11853        }
11854        __tmp.put_u32_le(self.time_boot_ms);
11855        for val in &self.q {
11856            __tmp.put_f32_le(*val);
11857        }
11858        __tmp.put_f32_le(self.angular_velocity_x);
11859        __tmp.put_f32_le(self.angular_velocity_y);
11860        __tmp.put_f32_le(self.angular_velocity_z);
11861        __tmp.put_u32_le(self.failure_flags.bits());
11862        __tmp.put_u16_le(self.flags.bits());
11863        __tmp.put_u8(self.target_system);
11864        __tmp.put_u8(self.target_component);
11865        __tmp.put_f32_le(self.delta_yaw);
11866        __tmp.put_f32_le(self.delta_yaw_velocity);
11867        __tmp.put_u8(self.gimbal_device_id);
11868        if matches!(version, MavlinkVersion::V2) {
11869            let len = __tmp.len();
11870            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
11871        } else {
11872            __tmp.len()
11873        }
11874    }
11875}
11876#[doc = "id: 283"]
11877#[doc = "Information about a low level gimbal. This message should be requested by the gimbal manager or a ground station using MAV_CMD_REQUEST_MESSAGE. The maximum angles and rates are the limits by hardware. However, the limits by software used are likely different/smaller and dependent on mode/settings/etc.."]
11878#[derive(Debug, Clone, PartialEq)]
11879#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11880#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11881pub struct GIMBAL_DEVICE_INFORMATION_DATA {
11882    #[doc = "UID of gimbal hardware (0 if unknown)."]
11883    pub uid: u64,
11884    #[doc = "Timestamp (time since system boot)."]
11885    pub time_boot_ms: u32,
11886    #[doc = "0xff)."]
11887    pub firmware_version: u32,
11888    #[doc = "0xff)."]
11889    pub hardware_version: u32,
11890    #[doc = "Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown."]
11891    pub roll_min: f32,
11892    #[doc = "Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown."]
11893    pub roll_max: f32,
11894    #[doc = "Minimum hardware pitch angle (positive: up, negative: down). NAN if unknown."]
11895    pub pitch_min: f32,
11896    #[doc = "Maximum hardware pitch angle (positive: up, negative: down). NAN if unknown."]
11897    pub pitch_max: f32,
11898    #[doc = "Minimum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown."]
11899    pub yaw_min: f32,
11900    #[doc = "Maximum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown."]
11901    pub yaw_max: f32,
11902    #[doc = "Bitmap of gimbal capability flags."]
11903    pub cap_flags: GimbalDeviceCapFlags,
11904    #[doc = "Bitmap for use for gimbal-specific capability flags."]
11905    pub custom_cap_flags: u16,
11906    #[doc = "Name of the gimbal vendor."]
11907    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
11908    pub vendor_name: [u8; 32],
11909    #[doc = "Name of the gimbal model."]
11910    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
11911    pub model_name: [u8; 32],
11912    #[doc = "Custom name of the gimbal given to it by the user."]
11913    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
11914    pub custom_name: [u8; 32],
11915    #[doc = "This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set to a number between 1-6. If the component ID is separate, this field is not required and must be set to 0."]
11916    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
11917    pub gimbal_device_id: u8,
11918}
11919impl GIMBAL_DEVICE_INFORMATION_DATA {
11920    pub const ENCODED_LEN: usize = 145usize;
11921    pub const DEFAULT: Self = Self {
11922        uid: 0_u64,
11923        time_boot_ms: 0_u32,
11924        firmware_version: 0_u32,
11925        hardware_version: 0_u32,
11926        roll_min: 0.0_f32,
11927        roll_max: 0.0_f32,
11928        pitch_min: 0.0_f32,
11929        pitch_max: 0.0_f32,
11930        yaw_min: 0.0_f32,
11931        yaw_max: 0.0_f32,
11932        cap_flags: GimbalDeviceCapFlags::DEFAULT,
11933        custom_cap_flags: 0_u16,
11934        vendor_name: [0_u8; 32usize],
11935        model_name: [0_u8; 32usize],
11936        custom_name: [0_u8; 32usize],
11937        gimbal_device_id: 0_u8,
11938    };
11939    #[cfg(feature = "arbitrary")]
11940    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
11941        use arbitrary::{Arbitrary, Unstructured};
11942        let mut buf = [0u8; 1024];
11943        rng.fill_bytes(&mut buf);
11944        let mut unstructured = Unstructured::new(&buf);
11945        Self::arbitrary(&mut unstructured).unwrap_or_default()
11946    }
11947}
11948impl Default for GIMBAL_DEVICE_INFORMATION_DATA {
11949    fn default() -> Self {
11950        Self::DEFAULT.clone()
11951    }
11952}
11953impl MessageData for GIMBAL_DEVICE_INFORMATION_DATA {
11954    type Message = MavMessage;
11955    const ID: u32 = 283u32;
11956    const NAME: &'static str = "GIMBAL_DEVICE_INFORMATION";
11957    const EXTRA_CRC: u8 = 74u8;
11958    const ENCODED_LEN: usize = 145usize;
11959    fn deser(
11960        _version: MavlinkVersion,
11961        __input: &[u8],
11962    ) -> Result<Self, ::mavlink_core::error::ParserError> {
11963        let avail_len = __input.len();
11964        let mut payload_buf = [0; Self::ENCODED_LEN];
11965        let mut buf = if avail_len < Self::ENCODED_LEN {
11966            payload_buf[0..avail_len].copy_from_slice(__input);
11967            Bytes::new(&payload_buf)
11968        } else {
11969            Bytes::new(__input)
11970        };
11971        let mut __struct = Self::default();
11972        __struct.uid = buf.get_u64_le();
11973        __struct.time_boot_ms = buf.get_u32_le();
11974        __struct.firmware_version = buf.get_u32_le();
11975        __struct.hardware_version = buf.get_u32_le();
11976        __struct.roll_min = buf.get_f32_le();
11977        __struct.roll_max = buf.get_f32_le();
11978        __struct.pitch_min = buf.get_f32_le();
11979        __struct.pitch_max = buf.get_f32_le();
11980        __struct.yaw_min = buf.get_f32_le();
11981        __struct.yaw_max = buf.get_f32_le();
11982        let tmp = buf.get_u16_le();
11983        __struct.cap_flags = GimbalDeviceCapFlags::from_bits(
11984            tmp & GimbalDeviceCapFlags::all().bits(),
11985        )
11986        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
11987            flag_type: "GimbalDeviceCapFlags",
11988            value: tmp as u32,
11989        })?;
11990        __struct.custom_cap_flags = buf.get_u16_le();
11991        for v in &mut __struct.vendor_name {
11992            let val = buf.get_u8();
11993            *v = val;
11994        }
11995        for v in &mut __struct.model_name {
11996            let val = buf.get_u8();
11997            *v = val;
11998        }
11999        for v in &mut __struct.custom_name {
12000            let val = buf.get_u8();
12001            *v = val;
12002        }
12003        __struct.gimbal_device_id = buf.get_u8();
12004        Ok(__struct)
12005    }
12006    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
12007        let mut __tmp = BytesMut::new(bytes);
12008        #[allow(clippy::absurd_extreme_comparisons)]
12009        #[allow(unused_comparisons)]
12010        if __tmp.remaining() < Self::ENCODED_LEN {
12011            panic!(
12012                "buffer is too small (need {} bytes, but got {})",
12013                Self::ENCODED_LEN,
12014                __tmp.remaining(),
12015            )
12016        }
12017        __tmp.put_u64_le(self.uid);
12018        __tmp.put_u32_le(self.time_boot_ms);
12019        __tmp.put_u32_le(self.firmware_version);
12020        __tmp.put_u32_le(self.hardware_version);
12021        __tmp.put_f32_le(self.roll_min);
12022        __tmp.put_f32_le(self.roll_max);
12023        __tmp.put_f32_le(self.pitch_min);
12024        __tmp.put_f32_le(self.pitch_max);
12025        __tmp.put_f32_le(self.yaw_min);
12026        __tmp.put_f32_le(self.yaw_max);
12027        __tmp.put_u16_le(self.cap_flags.bits());
12028        __tmp.put_u16_le(self.custom_cap_flags);
12029        for val in &self.vendor_name {
12030            __tmp.put_u8(*val);
12031        }
12032        for val in &self.model_name {
12033            __tmp.put_u8(*val);
12034        }
12035        for val in &self.custom_name {
12036            __tmp.put_u8(*val);
12037        }
12038        __tmp.put_u8(self.gimbal_device_id);
12039        if matches!(version, MavlinkVersion::V2) {
12040            let len = __tmp.len();
12041            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
12042        } else {
12043            __tmp.len()
12044        }
12045    }
12046}
12047#[doc = "id: 284"]
12048#[doc = "Low level message to control a gimbal device's attitude. \t  This message is to be sent from the gimbal manager to the gimbal device component. \t  The quaternion and angular velocities can be set to NaN according to use case. \t  For the angles encoded in the quaternion and the angular velocities holds: \t  If the flag GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME is set, then they are relative to the vehicle heading (vehicle frame). \t  If the flag GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME is set, then they are relative to absolute North (earth frame). \t  If neither of these flags are set, then (for backwards compatibility) it holds: \t  If the flag GIMBAL_DEVICE_FLAGS_YAW_LOCK is set, then they are relative to absolute North (earth frame), \t  else they are relative to the vehicle heading (vehicle frame). \t  Setting both GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME and GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME is not allowed. \t  These rules are to ensure backwards compatibility. \t  New implementations should always set either GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME or GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME."]
12049#[derive(Debug, Clone, PartialEq)]
12050#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12051#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12052pub struct GIMBAL_DEVICE_SET_ATTITUDE_DATA {
12053    #[doc = "Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description. Set fields to NaN to be ignored."]
12054    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
12055    pub q: [f32; 4],
12056    #[doc = "X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN to be ignored."]
12057    pub angular_velocity_x: f32,
12058    #[doc = "Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN to be ignored."]
12059    pub angular_velocity_y: f32,
12060    #[doc = "Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN to be ignored."]
12061    pub angular_velocity_z: f32,
12062    #[doc = "Low level gimbal flags."]
12063    pub flags: GimbalDeviceFlags,
12064    #[doc = "System ID"]
12065    pub target_system: u8,
12066    #[doc = "Component ID"]
12067    pub target_component: u8,
12068}
12069impl GIMBAL_DEVICE_SET_ATTITUDE_DATA {
12070    pub const ENCODED_LEN: usize = 32usize;
12071    pub const DEFAULT: Self = Self {
12072        q: [0.0_f32; 4usize],
12073        angular_velocity_x: 0.0_f32,
12074        angular_velocity_y: 0.0_f32,
12075        angular_velocity_z: 0.0_f32,
12076        flags: GimbalDeviceFlags::DEFAULT,
12077        target_system: 0_u8,
12078        target_component: 0_u8,
12079    };
12080    #[cfg(feature = "arbitrary")]
12081    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
12082        use arbitrary::{Arbitrary, Unstructured};
12083        let mut buf = [0u8; 1024];
12084        rng.fill_bytes(&mut buf);
12085        let mut unstructured = Unstructured::new(&buf);
12086        Self::arbitrary(&mut unstructured).unwrap_or_default()
12087    }
12088}
12089impl Default for GIMBAL_DEVICE_SET_ATTITUDE_DATA {
12090    fn default() -> Self {
12091        Self::DEFAULT.clone()
12092    }
12093}
12094impl MessageData for GIMBAL_DEVICE_SET_ATTITUDE_DATA {
12095    type Message = MavMessage;
12096    const ID: u32 = 284u32;
12097    const NAME: &'static str = "GIMBAL_DEVICE_SET_ATTITUDE";
12098    const EXTRA_CRC: u8 = 99u8;
12099    const ENCODED_LEN: usize = 32usize;
12100    fn deser(
12101        _version: MavlinkVersion,
12102        __input: &[u8],
12103    ) -> Result<Self, ::mavlink_core::error::ParserError> {
12104        let avail_len = __input.len();
12105        let mut payload_buf = [0; Self::ENCODED_LEN];
12106        let mut buf = if avail_len < Self::ENCODED_LEN {
12107            payload_buf[0..avail_len].copy_from_slice(__input);
12108            Bytes::new(&payload_buf)
12109        } else {
12110            Bytes::new(__input)
12111        };
12112        let mut __struct = Self::default();
12113        for v in &mut __struct.q {
12114            let val = buf.get_f32_le();
12115            *v = val;
12116        }
12117        __struct.angular_velocity_x = buf.get_f32_le();
12118        __struct.angular_velocity_y = buf.get_f32_le();
12119        __struct.angular_velocity_z = buf.get_f32_le();
12120        let tmp = buf.get_u16_le();
12121        __struct.flags = GimbalDeviceFlags::from_bits(tmp & GimbalDeviceFlags::all().bits())
12122            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
12123                flag_type: "GimbalDeviceFlags",
12124                value: tmp as u32,
12125            })?;
12126        __struct.target_system = buf.get_u8();
12127        __struct.target_component = buf.get_u8();
12128        Ok(__struct)
12129    }
12130    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
12131        let mut __tmp = BytesMut::new(bytes);
12132        #[allow(clippy::absurd_extreme_comparisons)]
12133        #[allow(unused_comparisons)]
12134        if __tmp.remaining() < Self::ENCODED_LEN {
12135            panic!(
12136                "buffer is too small (need {} bytes, but got {})",
12137                Self::ENCODED_LEN,
12138                __tmp.remaining(),
12139            )
12140        }
12141        for val in &self.q {
12142            __tmp.put_f32_le(*val);
12143        }
12144        __tmp.put_f32_le(self.angular_velocity_x);
12145        __tmp.put_f32_le(self.angular_velocity_y);
12146        __tmp.put_f32_le(self.angular_velocity_z);
12147        __tmp.put_u16_le(self.flags.bits());
12148        __tmp.put_u8(self.target_system);
12149        __tmp.put_u8(self.target_component);
12150        if matches!(version, MavlinkVersion::V2) {
12151            let len = __tmp.len();
12152            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
12153        } else {
12154            __tmp.len()
12155        }
12156    }
12157}
12158#[doc = "id: 280"]
12159#[doc = "Information about a high level gimbal manager. This message should be requested by a ground station using MAV_CMD_REQUEST_MESSAGE."]
12160#[derive(Debug, Clone, PartialEq)]
12161#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12162#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12163pub struct GIMBAL_MANAGER_INFORMATION_DATA {
12164    #[doc = "Timestamp (time since system boot)."]
12165    pub time_boot_ms: u32,
12166    #[doc = "Bitmap of gimbal capability flags."]
12167    pub cap_flags: GimbalManagerCapFlags,
12168    #[doc = "Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left)"]
12169    pub roll_min: f32,
12170    #[doc = "Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left)"]
12171    pub roll_max: f32,
12172    #[doc = "Minimum pitch angle (positive: up, negative: down)"]
12173    pub pitch_min: f32,
12174    #[doc = "Maximum pitch angle (positive: up, negative: down)"]
12175    pub pitch_max: f32,
12176    #[doc = "Minimum yaw angle (positive: to the right, negative: to the left)"]
12177    pub yaw_min: f32,
12178    #[doc = "Maximum yaw angle (positive: to the right, negative: to the left)"]
12179    pub yaw_max: f32,
12180    #[doc = "Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal)."]
12181    pub gimbal_device_id: u8,
12182}
12183impl GIMBAL_MANAGER_INFORMATION_DATA {
12184    pub const ENCODED_LEN: usize = 33usize;
12185    pub const DEFAULT: Self = Self {
12186        time_boot_ms: 0_u32,
12187        cap_flags: GimbalManagerCapFlags::DEFAULT,
12188        roll_min: 0.0_f32,
12189        roll_max: 0.0_f32,
12190        pitch_min: 0.0_f32,
12191        pitch_max: 0.0_f32,
12192        yaw_min: 0.0_f32,
12193        yaw_max: 0.0_f32,
12194        gimbal_device_id: 0_u8,
12195    };
12196    #[cfg(feature = "arbitrary")]
12197    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
12198        use arbitrary::{Arbitrary, Unstructured};
12199        let mut buf = [0u8; 1024];
12200        rng.fill_bytes(&mut buf);
12201        let mut unstructured = Unstructured::new(&buf);
12202        Self::arbitrary(&mut unstructured).unwrap_or_default()
12203    }
12204}
12205impl Default for GIMBAL_MANAGER_INFORMATION_DATA {
12206    fn default() -> Self {
12207        Self::DEFAULT.clone()
12208    }
12209}
12210impl MessageData for GIMBAL_MANAGER_INFORMATION_DATA {
12211    type Message = MavMessage;
12212    const ID: u32 = 280u32;
12213    const NAME: &'static str = "GIMBAL_MANAGER_INFORMATION";
12214    const EXTRA_CRC: u8 = 70u8;
12215    const ENCODED_LEN: usize = 33usize;
12216    fn deser(
12217        _version: MavlinkVersion,
12218        __input: &[u8],
12219    ) -> Result<Self, ::mavlink_core::error::ParserError> {
12220        let avail_len = __input.len();
12221        let mut payload_buf = [0; Self::ENCODED_LEN];
12222        let mut buf = if avail_len < Self::ENCODED_LEN {
12223            payload_buf[0..avail_len].copy_from_slice(__input);
12224            Bytes::new(&payload_buf)
12225        } else {
12226            Bytes::new(__input)
12227        };
12228        let mut __struct = Self::default();
12229        __struct.time_boot_ms = buf.get_u32_le();
12230        let tmp = buf.get_u32_le();
12231        __struct.cap_flags = GimbalManagerCapFlags::from_bits(
12232            tmp & GimbalManagerCapFlags::all().bits(),
12233        )
12234        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
12235            flag_type: "GimbalManagerCapFlags",
12236            value: tmp as u32,
12237        })?;
12238        __struct.roll_min = buf.get_f32_le();
12239        __struct.roll_max = buf.get_f32_le();
12240        __struct.pitch_min = buf.get_f32_le();
12241        __struct.pitch_max = buf.get_f32_le();
12242        __struct.yaw_min = buf.get_f32_le();
12243        __struct.yaw_max = buf.get_f32_le();
12244        __struct.gimbal_device_id = buf.get_u8();
12245        Ok(__struct)
12246    }
12247    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
12248        let mut __tmp = BytesMut::new(bytes);
12249        #[allow(clippy::absurd_extreme_comparisons)]
12250        #[allow(unused_comparisons)]
12251        if __tmp.remaining() < Self::ENCODED_LEN {
12252            panic!(
12253                "buffer is too small (need {} bytes, but got {})",
12254                Self::ENCODED_LEN,
12255                __tmp.remaining(),
12256            )
12257        }
12258        __tmp.put_u32_le(self.time_boot_ms);
12259        __tmp.put_u32_le(self.cap_flags.bits());
12260        __tmp.put_f32_le(self.roll_min);
12261        __tmp.put_f32_le(self.roll_max);
12262        __tmp.put_f32_le(self.pitch_min);
12263        __tmp.put_f32_le(self.pitch_max);
12264        __tmp.put_f32_le(self.yaw_min);
12265        __tmp.put_f32_le(self.yaw_max);
12266        __tmp.put_u8(self.gimbal_device_id);
12267        if matches!(version, MavlinkVersion::V2) {
12268            let len = __tmp.len();
12269            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
12270        } else {
12271            __tmp.len()
12272        }
12273    }
12274}
12275#[doc = "id: 282"]
12276#[doc = "High level message to control a gimbal's attitude. This message is to be sent to the gimbal manager (e.g. from a ground station). Angles and rates can be set to NaN according to use case."]
12277#[derive(Debug, Clone, PartialEq)]
12278#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12279#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12280pub struct GIMBAL_MANAGER_SET_ATTITUDE_DATA {
12281    #[doc = "High level gimbal manager flags to use."]
12282    pub flags: GimbalManagerFlags,
12283    #[doc = "Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation, the frame is depends on whether the flag GIMBAL_MANAGER_FLAGS_YAW_LOCK is set)"]
12284    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
12285    pub q: [f32; 4],
12286    #[doc = "X component of angular velocity, positive is rolling to the right, NaN to be ignored."]
12287    pub angular_velocity_x: f32,
12288    #[doc = "Y component of angular velocity, positive is pitching up, NaN to be ignored."]
12289    pub angular_velocity_y: f32,
12290    #[doc = "Z component of angular velocity, positive is yawing to the right, NaN to be ignored."]
12291    pub angular_velocity_z: f32,
12292    #[doc = "System ID"]
12293    pub target_system: u8,
12294    #[doc = "Component ID"]
12295    pub target_component: u8,
12296    #[doc = "Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals)."]
12297    pub gimbal_device_id: u8,
12298}
12299impl GIMBAL_MANAGER_SET_ATTITUDE_DATA {
12300    pub const ENCODED_LEN: usize = 35usize;
12301    pub const DEFAULT: Self = Self {
12302        flags: GimbalManagerFlags::DEFAULT,
12303        q: [0.0_f32; 4usize],
12304        angular_velocity_x: 0.0_f32,
12305        angular_velocity_y: 0.0_f32,
12306        angular_velocity_z: 0.0_f32,
12307        target_system: 0_u8,
12308        target_component: 0_u8,
12309        gimbal_device_id: 0_u8,
12310    };
12311    #[cfg(feature = "arbitrary")]
12312    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
12313        use arbitrary::{Arbitrary, Unstructured};
12314        let mut buf = [0u8; 1024];
12315        rng.fill_bytes(&mut buf);
12316        let mut unstructured = Unstructured::new(&buf);
12317        Self::arbitrary(&mut unstructured).unwrap_or_default()
12318    }
12319}
12320impl Default for GIMBAL_MANAGER_SET_ATTITUDE_DATA {
12321    fn default() -> Self {
12322        Self::DEFAULT.clone()
12323    }
12324}
12325impl MessageData for GIMBAL_MANAGER_SET_ATTITUDE_DATA {
12326    type Message = MavMessage;
12327    const ID: u32 = 282u32;
12328    const NAME: &'static str = "GIMBAL_MANAGER_SET_ATTITUDE";
12329    const EXTRA_CRC: u8 = 123u8;
12330    const ENCODED_LEN: usize = 35usize;
12331    fn deser(
12332        _version: MavlinkVersion,
12333        __input: &[u8],
12334    ) -> Result<Self, ::mavlink_core::error::ParserError> {
12335        let avail_len = __input.len();
12336        let mut payload_buf = [0; Self::ENCODED_LEN];
12337        let mut buf = if avail_len < Self::ENCODED_LEN {
12338            payload_buf[0..avail_len].copy_from_slice(__input);
12339            Bytes::new(&payload_buf)
12340        } else {
12341            Bytes::new(__input)
12342        };
12343        let mut __struct = Self::default();
12344        let tmp = buf.get_u32_le();
12345        __struct.flags = GimbalManagerFlags::from_bits(tmp & GimbalManagerFlags::all().bits())
12346            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
12347                flag_type: "GimbalManagerFlags",
12348                value: tmp as u32,
12349            })?;
12350        for v in &mut __struct.q {
12351            let val = buf.get_f32_le();
12352            *v = val;
12353        }
12354        __struct.angular_velocity_x = buf.get_f32_le();
12355        __struct.angular_velocity_y = buf.get_f32_le();
12356        __struct.angular_velocity_z = buf.get_f32_le();
12357        __struct.target_system = buf.get_u8();
12358        __struct.target_component = buf.get_u8();
12359        __struct.gimbal_device_id = buf.get_u8();
12360        Ok(__struct)
12361    }
12362    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
12363        let mut __tmp = BytesMut::new(bytes);
12364        #[allow(clippy::absurd_extreme_comparisons)]
12365        #[allow(unused_comparisons)]
12366        if __tmp.remaining() < Self::ENCODED_LEN {
12367            panic!(
12368                "buffer is too small (need {} bytes, but got {})",
12369                Self::ENCODED_LEN,
12370                __tmp.remaining(),
12371            )
12372        }
12373        __tmp.put_u32_le(self.flags.bits());
12374        for val in &self.q {
12375            __tmp.put_f32_le(*val);
12376        }
12377        __tmp.put_f32_le(self.angular_velocity_x);
12378        __tmp.put_f32_le(self.angular_velocity_y);
12379        __tmp.put_f32_le(self.angular_velocity_z);
12380        __tmp.put_u8(self.target_system);
12381        __tmp.put_u8(self.target_component);
12382        __tmp.put_u8(self.gimbal_device_id);
12383        if matches!(version, MavlinkVersion::V2) {
12384            let len = __tmp.len();
12385            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
12386        } else {
12387            __tmp.len()
12388        }
12389    }
12390}
12391#[doc = "id: 288"]
12392#[doc = "High level message to control a gimbal manually. The angles or angular rates are unitless; the actual rates will depend on internal gimbal manager settings/configuration (e.g. set by parameters). This message is to be sent to the gimbal manager (e.g. from a ground station). Angles and rates can be set to NaN according to use case."]
12393#[derive(Debug, Clone, PartialEq)]
12394#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12395#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12396pub struct GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA {
12397    #[doc = "High level gimbal manager flags."]
12398    pub flags: GimbalManagerFlags,
12399    #[doc = "Pitch angle unitless (-1..1, positive: up, negative: down, NaN to be ignored)."]
12400    pub pitch: f32,
12401    #[doc = "Yaw angle unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored)."]
12402    pub yaw: f32,
12403    #[doc = "Pitch angular rate unitless (-1..1, positive: up, negative: down, NaN to be ignored)."]
12404    pub pitch_rate: f32,
12405    #[doc = "Yaw angular rate unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored)."]
12406    pub yaw_rate: f32,
12407    #[doc = "System ID"]
12408    pub target_system: u8,
12409    #[doc = "Component ID"]
12410    pub target_component: u8,
12411    #[doc = "Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals)."]
12412    pub gimbal_device_id: u8,
12413}
12414impl GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA {
12415    pub const ENCODED_LEN: usize = 23usize;
12416    pub const DEFAULT: Self = Self {
12417        flags: GimbalManagerFlags::DEFAULT,
12418        pitch: 0.0_f32,
12419        yaw: 0.0_f32,
12420        pitch_rate: 0.0_f32,
12421        yaw_rate: 0.0_f32,
12422        target_system: 0_u8,
12423        target_component: 0_u8,
12424        gimbal_device_id: 0_u8,
12425    };
12426    #[cfg(feature = "arbitrary")]
12427    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
12428        use arbitrary::{Arbitrary, Unstructured};
12429        let mut buf = [0u8; 1024];
12430        rng.fill_bytes(&mut buf);
12431        let mut unstructured = Unstructured::new(&buf);
12432        Self::arbitrary(&mut unstructured).unwrap_or_default()
12433    }
12434}
12435impl Default for GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA {
12436    fn default() -> Self {
12437        Self::DEFAULT.clone()
12438    }
12439}
12440impl MessageData for GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA {
12441    type Message = MavMessage;
12442    const ID: u32 = 288u32;
12443    const NAME: &'static str = "GIMBAL_MANAGER_SET_MANUAL_CONTROL";
12444    const EXTRA_CRC: u8 = 20u8;
12445    const ENCODED_LEN: usize = 23usize;
12446    fn deser(
12447        _version: MavlinkVersion,
12448        __input: &[u8],
12449    ) -> Result<Self, ::mavlink_core::error::ParserError> {
12450        let avail_len = __input.len();
12451        let mut payload_buf = [0; Self::ENCODED_LEN];
12452        let mut buf = if avail_len < Self::ENCODED_LEN {
12453            payload_buf[0..avail_len].copy_from_slice(__input);
12454            Bytes::new(&payload_buf)
12455        } else {
12456            Bytes::new(__input)
12457        };
12458        let mut __struct = Self::default();
12459        let tmp = buf.get_u32_le();
12460        __struct.flags = GimbalManagerFlags::from_bits(tmp & GimbalManagerFlags::all().bits())
12461            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
12462                flag_type: "GimbalManagerFlags",
12463                value: tmp as u32,
12464            })?;
12465        __struct.pitch = buf.get_f32_le();
12466        __struct.yaw = buf.get_f32_le();
12467        __struct.pitch_rate = buf.get_f32_le();
12468        __struct.yaw_rate = buf.get_f32_le();
12469        __struct.target_system = buf.get_u8();
12470        __struct.target_component = buf.get_u8();
12471        __struct.gimbal_device_id = buf.get_u8();
12472        Ok(__struct)
12473    }
12474    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
12475        let mut __tmp = BytesMut::new(bytes);
12476        #[allow(clippy::absurd_extreme_comparisons)]
12477        #[allow(unused_comparisons)]
12478        if __tmp.remaining() < Self::ENCODED_LEN {
12479            panic!(
12480                "buffer is too small (need {} bytes, but got {})",
12481                Self::ENCODED_LEN,
12482                __tmp.remaining(),
12483            )
12484        }
12485        __tmp.put_u32_le(self.flags.bits());
12486        __tmp.put_f32_le(self.pitch);
12487        __tmp.put_f32_le(self.yaw);
12488        __tmp.put_f32_le(self.pitch_rate);
12489        __tmp.put_f32_le(self.yaw_rate);
12490        __tmp.put_u8(self.target_system);
12491        __tmp.put_u8(self.target_component);
12492        __tmp.put_u8(self.gimbal_device_id);
12493        if matches!(version, MavlinkVersion::V2) {
12494            let len = __tmp.len();
12495            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
12496        } else {
12497            __tmp.len()
12498        }
12499    }
12500}
12501#[doc = "id: 287"]
12502#[doc = "Set gimbal manager pitch and yaw angles (high rate message). This message is to be sent to the gimbal manager (e.g. from a ground station) and will be ignored by gimbal devices. Angles and rates can be set to NaN according to use case. Use MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW for low-rate adjustments that require confirmation."]
12503#[derive(Debug, Clone, PartialEq)]
12504#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12505#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12506pub struct GIMBAL_MANAGER_SET_PITCHYAW_DATA {
12507    #[doc = "High level gimbal manager flags to use."]
12508    pub flags: GimbalManagerFlags,
12509    #[doc = "Pitch angle (positive: up, negative: down, NaN to be ignored)."]
12510    pub pitch: f32,
12511    #[doc = "Yaw angle (positive: to the right, negative: to the left, NaN to be ignored)."]
12512    pub yaw: f32,
12513    #[doc = "Pitch angular rate (positive: up, negative: down, NaN to be ignored)."]
12514    pub pitch_rate: f32,
12515    #[doc = "Yaw angular rate (positive: to the right, negative: to the left, NaN to be ignored)."]
12516    pub yaw_rate: f32,
12517    #[doc = "System ID"]
12518    pub target_system: u8,
12519    #[doc = "Component ID"]
12520    pub target_component: u8,
12521    #[doc = "Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals)."]
12522    pub gimbal_device_id: u8,
12523}
12524impl GIMBAL_MANAGER_SET_PITCHYAW_DATA {
12525    pub const ENCODED_LEN: usize = 23usize;
12526    pub const DEFAULT: Self = Self {
12527        flags: GimbalManagerFlags::DEFAULT,
12528        pitch: 0.0_f32,
12529        yaw: 0.0_f32,
12530        pitch_rate: 0.0_f32,
12531        yaw_rate: 0.0_f32,
12532        target_system: 0_u8,
12533        target_component: 0_u8,
12534        gimbal_device_id: 0_u8,
12535    };
12536    #[cfg(feature = "arbitrary")]
12537    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
12538        use arbitrary::{Arbitrary, Unstructured};
12539        let mut buf = [0u8; 1024];
12540        rng.fill_bytes(&mut buf);
12541        let mut unstructured = Unstructured::new(&buf);
12542        Self::arbitrary(&mut unstructured).unwrap_or_default()
12543    }
12544}
12545impl Default for GIMBAL_MANAGER_SET_PITCHYAW_DATA {
12546    fn default() -> Self {
12547        Self::DEFAULT.clone()
12548    }
12549}
12550impl MessageData for GIMBAL_MANAGER_SET_PITCHYAW_DATA {
12551    type Message = MavMessage;
12552    const ID: u32 = 287u32;
12553    const NAME: &'static str = "GIMBAL_MANAGER_SET_PITCHYAW";
12554    const EXTRA_CRC: u8 = 1u8;
12555    const ENCODED_LEN: usize = 23usize;
12556    fn deser(
12557        _version: MavlinkVersion,
12558        __input: &[u8],
12559    ) -> Result<Self, ::mavlink_core::error::ParserError> {
12560        let avail_len = __input.len();
12561        let mut payload_buf = [0; Self::ENCODED_LEN];
12562        let mut buf = if avail_len < Self::ENCODED_LEN {
12563            payload_buf[0..avail_len].copy_from_slice(__input);
12564            Bytes::new(&payload_buf)
12565        } else {
12566            Bytes::new(__input)
12567        };
12568        let mut __struct = Self::default();
12569        let tmp = buf.get_u32_le();
12570        __struct.flags = GimbalManagerFlags::from_bits(tmp & GimbalManagerFlags::all().bits())
12571            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
12572                flag_type: "GimbalManagerFlags",
12573                value: tmp as u32,
12574            })?;
12575        __struct.pitch = buf.get_f32_le();
12576        __struct.yaw = buf.get_f32_le();
12577        __struct.pitch_rate = buf.get_f32_le();
12578        __struct.yaw_rate = buf.get_f32_le();
12579        __struct.target_system = buf.get_u8();
12580        __struct.target_component = buf.get_u8();
12581        __struct.gimbal_device_id = buf.get_u8();
12582        Ok(__struct)
12583    }
12584    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
12585        let mut __tmp = BytesMut::new(bytes);
12586        #[allow(clippy::absurd_extreme_comparisons)]
12587        #[allow(unused_comparisons)]
12588        if __tmp.remaining() < Self::ENCODED_LEN {
12589            panic!(
12590                "buffer is too small (need {} bytes, but got {})",
12591                Self::ENCODED_LEN,
12592                __tmp.remaining(),
12593            )
12594        }
12595        __tmp.put_u32_le(self.flags.bits());
12596        __tmp.put_f32_le(self.pitch);
12597        __tmp.put_f32_le(self.yaw);
12598        __tmp.put_f32_le(self.pitch_rate);
12599        __tmp.put_f32_le(self.yaw_rate);
12600        __tmp.put_u8(self.target_system);
12601        __tmp.put_u8(self.target_component);
12602        __tmp.put_u8(self.gimbal_device_id);
12603        if matches!(version, MavlinkVersion::V2) {
12604            let len = __tmp.len();
12605            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
12606        } else {
12607            __tmp.len()
12608        }
12609    }
12610}
12611#[doc = "id: 281"]
12612#[doc = "Current status about a high level gimbal manager. This message should be broadcast at a low regular rate (e.g. 5Hz)."]
12613#[derive(Debug, Clone, PartialEq)]
12614#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12615#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12616pub struct GIMBAL_MANAGER_STATUS_DATA {
12617    #[doc = "Timestamp (time since system boot)."]
12618    pub time_boot_ms: u32,
12619    #[doc = "High level gimbal manager flags currently applied."]
12620    pub flags: GimbalManagerFlags,
12621    #[doc = "Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal)."]
12622    pub gimbal_device_id: u8,
12623    #[doc = "System ID of MAVLink component with primary control, 0 for none."]
12624    pub primary_control_sysid: u8,
12625    #[doc = "Component ID of MAVLink component with primary control, 0 for none."]
12626    pub primary_control_compid: u8,
12627    #[doc = "System ID of MAVLink component with secondary control, 0 for none."]
12628    pub secondary_control_sysid: u8,
12629    #[doc = "Component ID of MAVLink component with secondary control, 0 for none."]
12630    pub secondary_control_compid: u8,
12631}
12632impl GIMBAL_MANAGER_STATUS_DATA {
12633    pub const ENCODED_LEN: usize = 13usize;
12634    pub const DEFAULT: Self = Self {
12635        time_boot_ms: 0_u32,
12636        flags: GimbalManagerFlags::DEFAULT,
12637        gimbal_device_id: 0_u8,
12638        primary_control_sysid: 0_u8,
12639        primary_control_compid: 0_u8,
12640        secondary_control_sysid: 0_u8,
12641        secondary_control_compid: 0_u8,
12642    };
12643    #[cfg(feature = "arbitrary")]
12644    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
12645        use arbitrary::{Arbitrary, Unstructured};
12646        let mut buf = [0u8; 1024];
12647        rng.fill_bytes(&mut buf);
12648        let mut unstructured = Unstructured::new(&buf);
12649        Self::arbitrary(&mut unstructured).unwrap_or_default()
12650    }
12651}
12652impl Default for GIMBAL_MANAGER_STATUS_DATA {
12653    fn default() -> Self {
12654        Self::DEFAULT.clone()
12655    }
12656}
12657impl MessageData for GIMBAL_MANAGER_STATUS_DATA {
12658    type Message = MavMessage;
12659    const ID: u32 = 281u32;
12660    const NAME: &'static str = "GIMBAL_MANAGER_STATUS";
12661    const EXTRA_CRC: u8 = 48u8;
12662    const ENCODED_LEN: usize = 13usize;
12663    fn deser(
12664        _version: MavlinkVersion,
12665        __input: &[u8],
12666    ) -> Result<Self, ::mavlink_core::error::ParserError> {
12667        let avail_len = __input.len();
12668        let mut payload_buf = [0; Self::ENCODED_LEN];
12669        let mut buf = if avail_len < Self::ENCODED_LEN {
12670            payload_buf[0..avail_len].copy_from_slice(__input);
12671            Bytes::new(&payload_buf)
12672        } else {
12673            Bytes::new(__input)
12674        };
12675        let mut __struct = Self::default();
12676        __struct.time_boot_ms = buf.get_u32_le();
12677        let tmp = buf.get_u32_le();
12678        __struct.flags = GimbalManagerFlags::from_bits(tmp & GimbalManagerFlags::all().bits())
12679            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
12680                flag_type: "GimbalManagerFlags",
12681                value: tmp as u32,
12682            })?;
12683        __struct.gimbal_device_id = buf.get_u8();
12684        __struct.primary_control_sysid = buf.get_u8();
12685        __struct.primary_control_compid = buf.get_u8();
12686        __struct.secondary_control_sysid = buf.get_u8();
12687        __struct.secondary_control_compid = buf.get_u8();
12688        Ok(__struct)
12689    }
12690    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
12691        let mut __tmp = BytesMut::new(bytes);
12692        #[allow(clippy::absurd_extreme_comparisons)]
12693        #[allow(unused_comparisons)]
12694        if __tmp.remaining() < Self::ENCODED_LEN {
12695            panic!(
12696                "buffer is too small (need {} bytes, but got {})",
12697                Self::ENCODED_LEN,
12698                __tmp.remaining(),
12699            )
12700        }
12701        __tmp.put_u32_le(self.time_boot_ms);
12702        __tmp.put_u32_le(self.flags.bits());
12703        __tmp.put_u8(self.gimbal_device_id);
12704        __tmp.put_u8(self.primary_control_sysid);
12705        __tmp.put_u8(self.primary_control_compid);
12706        __tmp.put_u8(self.secondary_control_sysid);
12707        __tmp.put_u8(self.secondary_control_compid);
12708        if matches!(version, MavlinkVersion::V2) {
12709            let len = __tmp.len();
12710            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
12711        } else {
12712            __tmp.len()
12713        }
12714    }
12715}
12716#[doc = "id: 33"]
12717#[doc = "The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up). It                is designed as scaled integer message since the resolution of float is not sufficient."]
12718#[derive(Debug, Clone, PartialEq)]
12719#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12720#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12721pub struct GLOBAL_POSITION_INT_DATA {
12722    #[doc = "Timestamp (time since system boot)."]
12723    pub time_boot_ms: u32,
12724    #[doc = "Latitude, expressed"]
12725    pub lat: i32,
12726    #[doc = "Longitude, expressed"]
12727    pub lon: i32,
12728    #[doc = "Altitude (MSL). Note that virtually all GPS modules provide both WGS84 and MSL."]
12729    pub alt: i32,
12730    #[doc = "Altitude above home"]
12731    pub relative_alt: i32,
12732    #[doc = "Ground X Speed (Latitude, positive north)"]
12733    pub vx: i16,
12734    #[doc = "Ground Y Speed (Longitude, positive east)"]
12735    pub vy: i16,
12736    #[doc = "Ground Z Speed (Altitude, positive down)"]
12737    pub vz: i16,
12738    #[doc = "Vehicle heading (yaw angle), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX"]
12739    pub hdg: u16,
12740}
12741impl GLOBAL_POSITION_INT_DATA {
12742    pub const ENCODED_LEN: usize = 28usize;
12743    pub const DEFAULT: Self = Self {
12744        time_boot_ms: 0_u32,
12745        lat: 0_i32,
12746        lon: 0_i32,
12747        alt: 0_i32,
12748        relative_alt: 0_i32,
12749        vx: 0_i16,
12750        vy: 0_i16,
12751        vz: 0_i16,
12752        hdg: 0_u16,
12753    };
12754    #[cfg(feature = "arbitrary")]
12755    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
12756        use arbitrary::{Arbitrary, Unstructured};
12757        let mut buf = [0u8; 1024];
12758        rng.fill_bytes(&mut buf);
12759        let mut unstructured = Unstructured::new(&buf);
12760        Self::arbitrary(&mut unstructured).unwrap_or_default()
12761    }
12762}
12763impl Default for GLOBAL_POSITION_INT_DATA {
12764    fn default() -> Self {
12765        Self::DEFAULT.clone()
12766    }
12767}
12768impl MessageData for GLOBAL_POSITION_INT_DATA {
12769    type Message = MavMessage;
12770    const ID: u32 = 33u32;
12771    const NAME: &'static str = "GLOBAL_POSITION_INT";
12772    const EXTRA_CRC: u8 = 104u8;
12773    const ENCODED_LEN: usize = 28usize;
12774    fn deser(
12775        _version: MavlinkVersion,
12776        __input: &[u8],
12777    ) -> Result<Self, ::mavlink_core::error::ParserError> {
12778        let avail_len = __input.len();
12779        let mut payload_buf = [0; Self::ENCODED_LEN];
12780        let mut buf = if avail_len < Self::ENCODED_LEN {
12781            payload_buf[0..avail_len].copy_from_slice(__input);
12782            Bytes::new(&payload_buf)
12783        } else {
12784            Bytes::new(__input)
12785        };
12786        let mut __struct = Self::default();
12787        __struct.time_boot_ms = buf.get_u32_le();
12788        __struct.lat = buf.get_i32_le();
12789        __struct.lon = buf.get_i32_le();
12790        __struct.alt = buf.get_i32_le();
12791        __struct.relative_alt = buf.get_i32_le();
12792        __struct.vx = buf.get_i16_le();
12793        __struct.vy = buf.get_i16_le();
12794        __struct.vz = buf.get_i16_le();
12795        __struct.hdg = buf.get_u16_le();
12796        Ok(__struct)
12797    }
12798    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
12799        let mut __tmp = BytesMut::new(bytes);
12800        #[allow(clippy::absurd_extreme_comparisons)]
12801        #[allow(unused_comparisons)]
12802        if __tmp.remaining() < Self::ENCODED_LEN {
12803            panic!(
12804                "buffer is too small (need {} bytes, but got {})",
12805                Self::ENCODED_LEN,
12806                __tmp.remaining(),
12807            )
12808        }
12809        __tmp.put_u32_le(self.time_boot_ms);
12810        __tmp.put_i32_le(self.lat);
12811        __tmp.put_i32_le(self.lon);
12812        __tmp.put_i32_le(self.alt);
12813        __tmp.put_i32_le(self.relative_alt);
12814        __tmp.put_i16_le(self.vx);
12815        __tmp.put_i16_le(self.vy);
12816        __tmp.put_i16_le(self.vz);
12817        __tmp.put_u16_le(self.hdg);
12818        if matches!(version, MavlinkVersion::V2) {
12819            let len = __tmp.len();
12820            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
12821        } else {
12822            __tmp.len()
12823        }
12824    }
12825}
12826#[doc = "id: 63"]
12827#[doc = "The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up). It  is designed as scaled integer message since the resolution of float is not sufficient. NOTE: This message is intended for onboard networks / companion computers and higher-bandwidth links and optimized for accuracy and completeness. Please use the GLOBAL_POSITION_INT message for a minimal subset."]
12828#[derive(Debug, Clone, PartialEq)]
12829#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12830#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12831pub struct GLOBAL_POSITION_INT_COV_DATA {
12832    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
12833    pub time_usec: u64,
12834    #[doc = "Latitude"]
12835    pub lat: i32,
12836    #[doc = "Longitude"]
12837    pub lon: i32,
12838    #[doc = "Altitude in meters above MSL"]
12839    pub alt: i32,
12840    #[doc = "Altitude above ground"]
12841    pub relative_alt: i32,
12842    #[doc = "Ground X Speed (Latitude)"]
12843    pub vx: f32,
12844    #[doc = "Ground Y Speed (Longitude)"]
12845    pub vy: f32,
12846    #[doc = "Ground Z Speed (Altitude)"]
12847    pub vz: f32,
12848    #[doc = "Row-major representation of a 6x6 position and velocity 6x6 cross-covariance matrix (states: lat, lon, alt, vx, vy, vz; first six entries are the first ROW, next six entries are the second row, etc.). If unknown, assign NaN value to first element in the array."]
12849    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
12850    pub covariance: [f32; 36],
12851    #[doc = "Class id of the estimator this estimate originated from."]
12852    pub estimator_type: MavEstimatorType,
12853}
12854impl GLOBAL_POSITION_INT_COV_DATA {
12855    pub const ENCODED_LEN: usize = 181usize;
12856    pub const DEFAULT: Self = Self {
12857        time_usec: 0_u64,
12858        lat: 0_i32,
12859        lon: 0_i32,
12860        alt: 0_i32,
12861        relative_alt: 0_i32,
12862        vx: 0.0_f32,
12863        vy: 0.0_f32,
12864        vz: 0.0_f32,
12865        covariance: [0.0_f32; 36usize],
12866        estimator_type: MavEstimatorType::DEFAULT,
12867    };
12868    #[cfg(feature = "arbitrary")]
12869    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
12870        use arbitrary::{Arbitrary, Unstructured};
12871        let mut buf = [0u8; 1024];
12872        rng.fill_bytes(&mut buf);
12873        let mut unstructured = Unstructured::new(&buf);
12874        Self::arbitrary(&mut unstructured).unwrap_or_default()
12875    }
12876}
12877impl Default for GLOBAL_POSITION_INT_COV_DATA {
12878    fn default() -> Self {
12879        Self::DEFAULT.clone()
12880    }
12881}
12882impl MessageData for GLOBAL_POSITION_INT_COV_DATA {
12883    type Message = MavMessage;
12884    const ID: u32 = 63u32;
12885    const NAME: &'static str = "GLOBAL_POSITION_INT_COV";
12886    const EXTRA_CRC: u8 = 119u8;
12887    const ENCODED_LEN: usize = 181usize;
12888    fn deser(
12889        _version: MavlinkVersion,
12890        __input: &[u8],
12891    ) -> Result<Self, ::mavlink_core::error::ParserError> {
12892        let avail_len = __input.len();
12893        let mut payload_buf = [0; Self::ENCODED_LEN];
12894        let mut buf = if avail_len < Self::ENCODED_LEN {
12895            payload_buf[0..avail_len].copy_from_slice(__input);
12896            Bytes::new(&payload_buf)
12897        } else {
12898            Bytes::new(__input)
12899        };
12900        let mut __struct = Self::default();
12901        __struct.time_usec = buf.get_u64_le();
12902        __struct.lat = buf.get_i32_le();
12903        __struct.lon = buf.get_i32_le();
12904        __struct.alt = buf.get_i32_le();
12905        __struct.relative_alt = buf.get_i32_le();
12906        __struct.vx = buf.get_f32_le();
12907        __struct.vy = buf.get_f32_le();
12908        __struct.vz = buf.get_f32_le();
12909        for v in &mut __struct.covariance {
12910            let val = buf.get_f32_le();
12911            *v = val;
12912        }
12913        let tmp = buf.get_u8();
12914        __struct.estimator_type =
12915            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
12916                enum_type: "MavEstimatorType",
12917                value: tmp as u32,
12918            })?;
12919        Ok(__struct)
12920    }
12921    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
12922        let mut __tmp = BytesMut::new(bytes);
12923        #[allow(clippy::absurd_extreme_comparisons)]
12924        #[allow(unused_comparisons)]
12925        if __tmp.remaining() < Self::ENCODED_LEN {
12926            panic!(
12927                "buffer is too small (need {} bytes, but got {})",
12928                Self::ENCODED_LEN,
12929                __tmp.remaining(),
12930            )
12931        }
12932        __tmp.put_u64_le(self.time_usec);
12933        __tmp.put_i32_le(self.lat);
12934        __tmp.put_i32_le(self.lon);
12935        __tmp.put_i32_le(self.alt);
12936        __tmp.put_i32_le(self.relative_alt);
12937        __tmp.put_f32_le(self.vx);
12938        __tmp.put_f32_le(self.vy);
12939        __tmp.put_f32_le(self.vz);
12940        for val in &self.covariance {
12941            __tmp.put_f32_le(*val);
12942        }
12943        __tmp.put_u8(self.estimator_type as u8);
12944        if matches!(version, MavlinkVersion::V2) {
12945            let len = __tmp.len();
12946            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
12947        } else {
12948            __tmp.len()
12949        }
12950    }
12951}
12952#[doc = "id: 101"]
12953#[doc = "Global position/attitude estimate from a vision source."]
12954#[derive(Debug, Clone, PartialEq)]
12955#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12956#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12957pub struct GLOBAL_VISION_POSITION_ESTIMATE_DATA {
12958    #[doc = "Timestamp (UNIX time or since system boot)"]
12959    pub usec: u64,
12960    #[doc = "Global X position"]
12961    pub x: f32,
12962    #[doc = "Global Y position"]
12963    pub y: f32,
12964    #[doc = "Global Z position"]
12965    pub z: f32,
12966    #[doc = "Roll angle"]
12967    pub roll: f32,
12968    #[doc = "Pitch angle"]
12969    pub pitch: f32,
12970    #[doc = "Yaw angle"]
12971    pub yaw: f32,
12972    #[doc = "Row-major representation of pose 6x6 cross-covariance matrix upper right triangle (states: x_global, y_global, z_global, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array."]
12973    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
12974    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
12975    pub covariance: [f32; 21],
12976    #[doc = "Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps."]
12977    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
12978    pub reset_counter: u8,
12979}
12980impl GLOBAL_VISION_POSITION_ESTIMATE_DATA {
12981    pub const ENCODED_LEN: usize = 117usize;
12982    pub const DEFAULT: Self = Self {
12983        usec: 0_u64,
12984        x: 0.0_f32,
12985        y: 0.0_f32,
12986        z: 0.0_f32,
12987        roll: 0.0_f32,
12988        pitch: 0.0_f32,
12989        yaw: 0.0_f32,
12990        covariance: [0.0_f32; 21usize],
12991        reset_counter: 0_u8,
12992    };
12993    #[cfg(feature = "arbitrary")]
12994    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
12995        use arbitrary::{Arbitrary, Unstructured};
12996        let mut buf = [0u8; 1024];
12997        rng.fill_bytes(&mut buf);
12998        let mut unstructured = Unstructured::new(&buf);
12999        Self::arbitrary(&mut unstructured).unwrap_or_default()
13000    }
13001}
13002impl Default for GLOBAL_VISION_POSITION_ESTIMATE_DATA {
13003    fn default() -> Self {
13004        Self::DEFAULT.clone()
13005    }
13006}
13007impl MessageData for GLOBAL_VISION_POSITION_ESTIMATE_DATA {
13008    type Message = MavMessage;
13009    const ID: u32 = 101u32;
13010    const NAME: &'static str = "GLOBAL_VISION_POSITION_ESTIMATE";
13011    const EXTRA_CRC: u8 = 102u8;
13012    const ENCODED_LEN: usize = 117usize;
13013    fn deser(
13014        _version: MavlinkVersion,
13015        __input: &[u8],
13016    ) -> Result<Self, ::mavlink_core::error::ParserError> {
13017        let avail_len = __input.len();
13018        let mut payload_buf = [0; Self::ENCODED_LEN];
13019        let mut buf = if avail_len < Self::ENCODED_LEN {
13020            payload_buf[0..avail_len].copy_from_slice(__input);
13021            Bytes::new(&payload_buf)
13022        } else {
13023            Bytes::new(__input)
13024        };
13025        let mut __struct = Self::default();
13026        __struct.usec = buf.get_u64_le();
13027        __struct.x = buf.get_f32_le();
13028        __struct.y = buf.get_f32_le();
13029        __struct.z = buf.get_f32_le();
13030        __struct.roll = buf.get_f32_le();
13031        __struct.pitch = buf.get_f32_le();
13032        __struct.yaw = buf.get_f32_le();
13033        for v in &mut __struct.covariance {
13034            let val = buf.get_f32_le();
13035            *v = val;
13036        }
13037        __struct.reset_counter = buf.get_u8();
13038        Ok(__struct)
13039    }
13040    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
13041        let mut __tmp = BytesMut::new(bytes);
13042        #[allow(clippy::absurd_extreme_comparisons)]
13043        #[allow(unused_comparisons)]
13044        if __tmp.remaining() < Self::ENCODED_LEN {
13045            panic!(
13046                "buffer is too small (need {} bytes, but got {})",
13047                Self::ENCODED_LEN,
13048                __tmp.remaining(),
13049            )
13050        }
13051        __tmp.put_u64_le(self.usec);
13052        __tmp.put_f32_le(self.x);
13053        __tmp.put_f32_le(self.y);
13054        __tmp.put_f32_le(self.z);
13055        __tmp.put_f32_le(self.roll);
13056        __tmp.put_f32_le(self.pitch);
13057        __tmp.put_f32_le(self.yaw);
13058        for val in &self.covariance {
13059            __tmp.put_f32_le(*val);
13060        }
13061        __tmp.put_u8(self.reset_counter);
13062        if matches!(version, MavlinkVersion::V2) {
13063            let len = __tmp.len();
13064            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
13065        } else {
13066            __tmp.len()
13067        }
13068    }
13069}
13070#[doc = "id: 124"]
13071#[doc = "Second GPS data."]
13072#[derive(Debug, Clone, PartialEq)]
13073#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13074#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13075pub struct GPS2_RAW_DATA {
13076    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
13077    pub time_usec: u64,
13078    #[doc = "Latitude (WGS84)"]
13079    pub lat: i32,
13080    #[doc = "Longitude (WGS84)"]
13081    pub lon: i32,
13082    #[doc = "Altitude (MSL). Positive for up."]
13083    pub alt: i32,
13084    #[doc = "Age of DGPS info"]
13085    pub dgps_age: u32,
13086    #[doc = "GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX"]
13087    pub eph: u16,
13088    #[doc = "GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX"]
13089    pub epv: u16,
13090    #[doc = "GPS ground speed. If unknown, set to: UINT16_MAX"]
13091    pub vel: u16,
13092    #[doc = "Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX"]
13093    pub cog: u16,
13094    #[doc = "GPS fix type."]
13095    pub fix_type: GpsFixType,
13096    #[doc = "Number of satellites visible. If unknown, set to UINT8_MAX"]
13097    pub satellites_visible: u8,
13098    #[doc = "Number of DGPS satellites"]
13099    pub dgps_numch: u8,
13100    #[doc = "Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north."]
13101    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13102    pub yaw: u16,
13103    #[doc = "Altitude (above WGS84, EGM96 ellipsoid). Positive for up."]
13104    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13105    pub alt_ellipsoid: i32,
13106    #[doc = "Position uncertainty."]
13107    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13108    pub h_acc: u32,
13109    #[doc = "Altitude uncertainty."]
13110    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13111    pub v_acc: u32,
13112    #[doc = "Speed uncertainty."]
13113    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13114    pub vel_acc: u32,
13115    #[doc = "Heading / track uncertainty"]
13116    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13117    pub hdg_acc: u32,
13118}
13119impl GPS2_RAW_DATA {
13120    pub const ENCODED_LEN: usize = 57usize;
13121    pub const DEFAULT: Self = Self {
13122        time_usec: 0_u64,
13123        lat: 0_i32,
13124        lon: 0_i32,
13125        alt: 0_i32,
13126        dgps_age: 0_u32,
13127        eph: 0_u16,
13128        epv: 0_u16,
13129        vel: 0_u16,
13130        cog: 0_u16,
13131        fix_type: GpsFixType::DEFAULT,
13132        satellites_visible: 0_u8,
13133        dgps_numch: 0_u8,
13134        yaw: 0_u16,
13135        alt_ellipsoid: 0_i32,
13136        h_acc: 0_u32,
13137        v_acc: 0_u32,
13138        vel_acc: 0_u32,
13139        hdg_acc: 0_u32,
13140    };
13141    #[cfg(feature = "arbitrary")]
13142    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
13143        use arbitrary::{Arbitrary, Unstructured};
13144        let mut buf = [0u8; 1024];
13145        rng.fill_bytes(&mut buf);
13146        let mut unstructured = Unstructured::new(&buf);
13147        Self::arbitrary(&mut unstructured).unwrap_or_default()
13148    }
13149}
13150impl Default for GPS2_RAW_DATA {
13151    fn default() -> Self {
13152        Self::DEFAULT.clone()
13153    }
13154}
13155impl MessageData for GPS2_RAW_DATA {
13156    type Message = MavMessage;
13157    const ID: u32 = 124u32;
13158    const NAME: &'static str = "GPS2_RAW";
13159    const EXTRA_CRC: u8 = 87u8;
13160    const ENCODED_LEN: usize = 57usize;
13161    fn deser(
13162        _version: MavlinkVersion,
13163        __input: &[u8],
13164    ) -> Result<Self, ::mavlink_core::error::ParserError> {
13165        let avail_len = __input.len();
13166        let mut payload_buf = [0; Self::ENCODED_LEN];
13167        let mut buf = if avail_len < Self::ENCODED_LEN {
13168            payload_buf[0..avail_len].copy_from_slice(__input);
13169            Bytes::new(&payload_buf)
13170        } else {
13171            Bytes::new(__input)
13172        };
13173        let mut __struct = Self::default();
13174        __struct.time_usec = buf.get_u64_le();
13175        __struct.lat = buf.get_i32_le();
13176        __struct.lon = buf.get_i32_le();
13177        __struct.alt = buf.get_i32_le();
13178        __struct.dgps_age = buf.get_u32_le();
13179        __struct.eph = buf.get_u16_le();
13180        __struct.epv = buf.get_u16_le();
13181        __struct.vel = buf.get_u16_le();
13182        __struct.cog = buf.get_u16_le();
13183        let tmp = buf.get_u8();
13184        __struct.fix_type =
13185            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
13186                enum_type: "GpsFixType",
13187                value: tmp as u32,
13188            })?;
13189        __struct.satellites_visible = buf.get_u8();
13190        __struct.dgps_numch = buf.get_u8();
13191        __struct.yaw = buf.get_u16_le();
13192        __struct.alt_ellipsoid = buf.get_i32_le();
13193        __struct.h_acc = buf.get_u32_le();
13194        __struct.v_acc = buf.get_u32_le();
13195        __struct.vel_acc = buf.get_u32_le();
13196        __struct.hdg_acc = buf.get_u32_le();
13197        Ok(__struct)
13198    }
13199    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
13200        let mut __tmp = BytesMut::new(bytes);
13201        #[allow(clippy::absurd_extreme_comparisons)]
13202        #[allow(unused_comparisons)]
13203        if __tmp.remaining() < Self::ENCODED_LEN {
13204            panic!(
13205                "buffer is too small (need {} bytes, but got {})",
13206                Self::ENCODED_LEN,
13207                __tmp.remaining(),
13208            )
13209        }
13210        __tmp.put_u64_le(self.time_usec);
13211        __tmp.put_i32_le(self.lat);
13212        __tmp.put_i32_le(self.lon);
13213        __tmp.put_i32_le(self.alt);
13214        __tmp.put_u32_le(self.dgps_age);
13215        __tmp.put_u16_le(self.eph);
13216        __tmp.put_u16_le(self.epv);
13217        __tmp.put_u16_le(self.vel);
13218        __tmp.put_u16_le(self.cog);
13219        __tmp.put_u8(self.fix_type as u8);
13220        __tmp.put_u8(self.satellites_visible);
13221        __tmp.put_u8(self.dgps_numch);
13222        __tmp.put_u16_le(self.yaw);
13223        __tmp.put_i32_le(self.alt_ellipsoid);
13224        __tmp.put_u32_le(self.h_acc);
13225        __tmp.put_u32_le(self.v_acc);
13226        __tmp.put_u32_le(self.vel_acc);
13227        __tmp.put_u32_le(self.hdg_acc);
13228        if matches!(version, MavlinkVersion::V2) {
13229            let len = __tmp.len();
13230            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
13231        } else {
13232            __tmp.len()
13233        }
13234    }
13235}
13236#[doc = "id: 128"]
13237#[doc = "RTK GPS data. Gives information on the relative baseline calculation the GPS is reporting."]
13238#[derive(Debug, Clone, PartialEq)]
13239#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13240#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13241pub struct GPS2_RTK_DATA {
13242    #[doc = "Time since boot of last baseline message received."]
13243    pub time_last_baseline_ms: u32,
13244    #[doc = "GPS Time of Week of last baseline"]
13245    pub tow: u32,
13246    #[doc = "Current baseline in ECEF x or NED north component."]
13247    pub baseline_a_mm: i32,
13248    #[doc = "Current baseline in ECEF y or NED east component."]
13249    pub baseline_b_mm: i32,
13250    #[doc = "Current baseline in ECEF z or NED down component."]
13251    pub baseline_c_mm: i32,
13252    #[doc = "Current estimate of baseline accuracy."]
13253    pub accuracy: u32,
13254    #[doc = "Current number of integer ambiguity hypotheses."]
13255    pub iar_num_hypotheses: i32,
13256    #[doc = "GPS Week Number of last baseline"]
13257    pub wn: u16,
13258    #[doc = "Identification of connected RTK receiver."]
13259    pub rtk_receiver_id: u8,
13260    #[doc = "GPS-specific health report for RTK data."]
13261    pub rtk_health: u8,
13262    #[doc = "Rate of baseline messages being received by GPS"]
13263    pub rtk_rate: u8,
13264    #[doc = "Current number of sats used for RTK calculation."]
13265    pub nsats: u8,
13266    #[doc = "Coordinate system of baseline"]
13267    pub baseline_coords_type: RtkBaselineCoordinateSystem,
13268}
13269impl GPS2_RTK_DATA {
13270    pub const ENCODED_LEN: usize = 35usize;
13271    pub const DEFAULT: Self = Self {
13272        time_last_baseline_ms: 0_u32,
13273        tow: 0_u32,
13274        baseline_a_mm: 0_i32,
13275        baseline_b_mm: 0_i32,
13276        baseline_c_mm: 0_i32,
13277        accuracy: 0_u32,
13278        iar_num_hypotheses: 0_i32,
13279        wn: 0_u16,
13280        rtk_receiver_id: 0_u8,
13281        rtk_health: 0_u8,
13282        rtk_rate: 0_u8,
13283        nsats: 0_u8,
13284        baseline_coords_type: RtkBaselineCoordinateSystem::DEFAULT,
13285    };
13286    #[cfg(feature = "arbitrary")]
13287    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
13288        use arbitrary::{Arbitrary, Unstructured};
13289        let mut buf = [0u8; 1024];
13290        rng.fill_bytes(&mut buf);
13291        let mut unstructured = Unstructured::new(&buf);
13292        Self::arbitrary(&mut unstructured).unwrap_or_default()
13293    }
13294}
13295impl Default for GPS2_RTK_DATA {
13296    fn default() -> Self {
13297        Self::DEFAULT.clone()
13298    }
13299}
13300impl MessageData for GPS2_RTK_DATA {
13301    type Message = MavMessage;
13302    const ID: u32 = 128u32;
13303    const NAME: &'static str = "GPS2_RTK";
13304    const EXTRA_CRC: u8 = 226u8;
13305    const ENCODED_LEN: usize = 35usize;
13306    fn deser(
13307        _version: MavlinkVersion,
13308        __input: &[u8],
13309    ) -> Result<Self, ::mavlink_core::error::ParserError> {
13310        let avail_len = __input.len();
13311        let mut payload_buf = [0; Self::ENCODED_LEN];
13312        let mut buf = if avail_len < Self::ENCODED_LEN {
13313            payload_buf[0..avail_len].copy_from_slice(__input);
13314            Bytes::new(&payload_buf)
13315        } else {
13316            Bytes::new(__input)
13317        };
13318        let mut __struct = Self::default();
13319        __struct.time_last_baseline_ms = buf.get_u32_le();
13320        __struct.tow = buf.get_u32_le();
13321        __struct.baseline_a_mm = buf.get_i32_le();
13322        __struct.baseline_b_mm = buf.get_i32_le();
13323        __struct.baseline_c_mm = buf.get_i32_le();
13324        __struct.accuracy = buf.get_u32_le();
13325        __struct.iar_num_hypotheses = buf.get_i32_le();
13326        __struct.wn = buf.get_u16_le();
13327        __struct.rtk_receiver_id = buf.get_u8();
13328        __struct.rtk_health = buf.get_u8();
13329        __struct.rtk_rate = buf.get_u8();
13330        __struct.nsats = buf.get_u8();
13331        let tmp = buf.get_u8();
13332        __struct.baseline_coords_type =
13333            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
13334                enum_type: "RtkBaselineCoordinateSystem",
13335                value: tmp as u32,
13336            })?;
13337        Ok(__struct)
13338    }
13339    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
13340        let mut __tmp = BytesMut::new(bytes);
13341        #[allow(clippy::absurd_extreme_comparisons)]
13342        #[allow(unused_comparisons)]
13343        if __tmp.remaining() < Self::ENCODED_LEN {
13344            panic!(
13345                "buffer is too small (need {} bytes, but got {})",
13346                Self::ENCODED_LEN,
13347                __tmp.remaining(),
13348            )
13349        }
13350        __tmp.put_u32_le(self.time_last_baseline_ms);
13351        __tmp.put_u32_le(self.tow);
13352        __tmp.put_i32_le(self.baseline_a_mm);
13353        __tmp.put_i32_le(self.baseline_b_mm);
13354        __tmp.put_i32_le(self.baseline_c_mm);
13355        __tmp.put_u32_le(self.accuracy);
13356        __tmp.put_i32_le(self.iar_num_hypotheses);
13357        __tmp.put_u16_le(self.wn);
13358        __tmp.put_u8(self.rtk_receiver_id);
13359        __tmp.put_u8(self.rtk_health);
13360        __tmp.put_u8(self.rtk_rate);
13361        __tmp.put_u8(self.nsats);
13362        __tmp.put_u8(self.baseline_coords_type as u8);
13363        if matches!(version, MavlinkVersion::V2) {
13364            let len = __tmp.len();
13365            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
13366        } else {
13367            __tmp.len()
13368        }
13369    }
13370}
13371#[doc = "id: 49"]
13372#[doc = "Publishes the GPS coordinates of the vehicle local origin (0,0,0) position. Emitted whenever a new GPS-Local position mapping is requested or set - e.g. following SET_GPS_GLOBAL_ORIGIN message."]
13373#[derive(Debug, Clone, PartialEq)]
13374#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13375#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13376pub struct GPS_GLOBAL_ORIGIN_DATA {
13377    #[doc = "Latitude (WGS84)"]
13378    pub latitude: i32,
13379    #[doc = "Longitude (WGS84)"]
13380    pub longitude: i32,
13381    #[doc = "Altitude (MSL). Positive for up."]
13382    pub altitude: i32,
13383    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
13384    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13385    pub time_usec: u64,
13386}
13387impl GPS_GLOBAL_ORIGIN_DATA {
13388    pub const ENCODED_LEN: usize = 20usize;
13389    pub const DEFAULT: Self = Self {
13390        latitude: 0_i32,
13391        longitude: 0_i32,
13392        altitude: 0_i32,
13393        time_usec: 0_u64,
13394    };
13395    #[cfg(feature = "arbitrary")]
13396    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
13397        use arbitrary::{Arbitrary, Unstructured};
13398        let mut buf = [0u8; 1024];
13399        rng.fill_bytes(&mut buf);
13400        let mut unstructured = Unstructured::new(&buf);
13401        Self::arbitrary(&mut unstructured).unwrap_or_default()
13402    }
13403}
13404impl Default for GPS_GLOBAL_ORIGIN_DATA {
13405    fn default() -> Self {
13406        Self::DEFAULT.clone()
13407    }
13408}
13409impl MessageData for GPS_GLOBAL_ORIGIN_DATA {
13410    type Message = MavMessage;
13411    const ID: u32 = 49u32;
13412    const NAME: &'static str = "GPS_GLOBAL_ORIGIN";
13413    const EXTRA_CRC: u8 = 39u8;
13414    const ENCODED_LEN: usize = 20usize;
13415    fn deser(
13416        _version: MavlinkVersion,
13417        __input: &[u8],
13418    ) -> Result<Self, ::mavlink_core::error::ParserError> {
13419        let avail_len = __input.len();
13420        let mut payload_buf = [0; Self::ENCODED_LEN];
13421        let mut buf = if avail_len < Self::ENCODED_LEN {
13422            payload_buf[0..avail_len].copy_from_slice(__input);
13423            Bytes::new(&payload_buf)
13424        } else {
13425            Bytes::new(__input)
13426        };
13427        let mut __struct = Self::default();
13428        __struct.latitude = buf.get_i32_le();
13429        __struct.longitude = buf.get_i32_le();
13430        __struct.altitude = buf.get_i32_le();
13431        __struct.time_usec = buf.get_u64_le();
13432        Ok(__struct)
13433    }
13434    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
13435        let mut __tmp = BytesMut::new(bytes);
13436        #[allow(clippy::absurd_extreme_comparisons)]
13437        #[allow(unused_comparisons)]
13438        if __tmp.remaining() < Self::ENCODED_LEN {
13439            panic!(
13440                "buffer is too small (need {} bytes, but got {})",
13441                Self::ENCODED_LEN,
13442                __tmp.remaining(),
13443            )
13444        }
13445        __tmp.put_i32_le(self.latitude);
13446        __tmp.put_i32_le(self.longitude);
13447        __tmp.put_i32_le(self.altitude);
13448        __tmp.put_u64_le(self.time_usec);
13449        if matches!(version, MavlinkVersion::V2) {
13450            let len = __tmp.len();
13451            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
13452        } else {
13453            __tmp.len()
13454        }
13455    }
13456}
13457#[deprecated = " See `GPS_RTCM_DATA` (Deprecated since 2022-05)"]
13458#[doc = "id: 123"]
13459#[doc = "Data for injecting into the onboard GPS (used for DGPS)."]
13460#[derive(Debug, Clone, PartialEq)]
13461#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13462#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13463pub struct GPS_INJECT_DATA_DATA {
13464    #[doc = "System ID"]
13465    pub target_system: u8,
13466    #[doc = "Component ID"]
13467    pub target_component: u8,
13468    #[doc = "Data length"]
13469    pub len: u8,
13470    #[doc = "Raw data (110 is enough for 12 satellites of RTCMv2)"]
13471    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
13472    pub data: [u8; 110],
13473}
13474impl GPS_INJECT_DATA_DATA {
13475    pub const ENCODED_LEN: usize = 113usize;
13476    pub const DEFAULT: Self = Self {
13477        target_system: 0_u8,
13478        target_component: 0_u8,
13479        len: 0_u8,
13480        data: [0_u8; 110usize],
13481    };
13482    #[cfg(feature = "arbitrary")]
13483    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
13484        use arbitrary::{Arbitrary, Unstructured};
13485        let mut buf = [0u8; 1024];
13486        rng.fill_bytes(&mut buf);
13487        let mut unstructured = Unstructured::new(&buf);
13488        Self::arbitrary(&mut unstructured).unwrap_or_default()
13489    }
13490}
13491impl Default for GPS_INJECT_DATA_DATA {
13492    fn default() -> Self {
13493        Self::DEFAULT.clone()
13494    }
13495}
13496impl MessageData for GPS_INJECT_DATA_DATA {
13497    type Message = MavMessage;
13498    const ID: u32 = 123u32;
13499    const NAME: &'static str = "GPS_INJECT_DATA";
13500    const EXTRA_CRC: u8 = 250u8;
13501    const ENCODED_LEN: usize = 113usize;
13502    fn deser(
13503        _version: MavlinkVersion,
13504        __input: &[u8],
13505    ) -> Result<Self, ::mavlink_core::error::ParserError> {
13506        let avail_len = __input.len();
13507        let mut payload_buf = [0; Self::ENCODED_LEN];
13508        let mut buf = if avail_len < Self::ENCODED_LEN {
13509            payload_buf[0..avail_len].copy_from_slice(__input);
13510            Bytes::new(&payload_buf)
13511        } else {
13512            Bytes::new(__input)
13513        };
13514        let mut __struct = Self::default();
13515        __struct.target_system = buf.get_u8();
13516        __struct.target_component = buf.get_u8();
13517        __struct.len = buf.get_u8();
13518        for v in &mut __struct.data {
13519            let val = buf.get_u8();
13520            *v = val;
13521        }
13522        Ok(__struct)
13523    }
13524    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
13525        let mut __tmp = BytesMut::new(bytes);
13526        #[allow(clippy::absurd_extreme_comparisons)]
13527        #[allow(unused_comparisons)]
13528        if __tmp.remaining() < Self::ENCODED_LEN {
13529            panic!(
13530                "buffer is too small (need {} bytes, but got {})",
13531                Self::ENCODED_LEN,
13532                __tmp.remaining(),
13533            )
13534        }
13535        __tmp.put_u8(self.target_system);
13536        __tmp.put_u8(self.target_component);
13537        __tmp.put_u8(self.len);
13538        for val in &self.data {
13539            __tmp.put_u8(*val);
13540        }
13541        if matches!(version, MavlinkVersion::V2) {
13542            let len = __tmp.len();
13543            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
13544        } else {
13545            __tmp.len()
13546        }
13547    }
13548}
13549#[doc = "id: 232"]
13550#[doc = "GPS sensor input message.  This is a raw sensor value sent by the GPS. This is NOT the global position estimate of the system."]
13551#[derive(Debug, Clone, PartialEq)]
13552#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13553#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13554pub struct GPS_INPUT_DATA {
13555    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
13556    pub time_usec: u64,
13557    #[doc = "GPS time (from start of GPS week)"]
13558    pub time_week_ms: u32,
13559    #[doc = "Latitude (WGS84)"]
13560    pub lat: i32,
13561    #[doc = "Longitude (WGS84)"]
13562    pub lon: i32,
13563    #[doc = "Altitude (MSL). Positive for up."]
13564    pub alt: f32,
13565    #[doc = "GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX"]
13566    pub hdop: f32,
13567    #[doc = "GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX"]
13568    pub vdop: f32,
13569    #[doc = "GPS velocity in north direction in earth-fixed NED frame"]
13570    pub vn: f32,
13571    #[doc = "GPS velocity in east direction in earth-fixed NED frame"]
13572    pub ve: f32,
13573    #[doc = "GPS velocity in down direction in earth-fixed NED frame"]
13574    pub vd: f32,
13575    #[doc = "GPS speed accuracy"]
13576    pub speed_accuracy: f32,
13577    #[doc = "GPS horizontal accuracy"]
13578    pub horiz_accuracy: f32,
13579    #[doc = "GPS vertical accuracy"]
13580    pub vert_accuracy: f32,
13581    #[doc = "Bitmap indicating which GPS input flags fields to ignore.  All other fields must be provided."]
13582    pub ignore_flags: GpsInputIgnoreFlags,
13583    #[doc = "GPS week number"]
13584    pub time_week: u16,
13585    #[doc = "ID of the GPS for multiple GPS inputs"]
13586    pub gps_id: u8,
13587    #[doc = "0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK"]
13588    pub fix_type: u8,
13589    #[doc = "Number of satellites visible."]
13590    pub satellites_visible: u8,
13591    #[doc = "Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north"]
13592    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13593    pub yaw: u16,
13594}
13595impl GPS_INPUT_DATA {
13596    pub const ENCODED_LEN: usize = 65usize;
13597    pub const DEFAULT: Self = Self {
13598        time_usec: 0_u64,
13599        time_week_ms: 0_u32,
13600        lat: 0_i32,
13601        lon: 0_i32,
13602        alt: 0.0_f32,
13603        hdop: 0.0_f32,
13604        vdop: 0.0_f32,
13605        vn: 0.0_f32,
13606        ve: 0.0_f32,
13607        vd: 0.0_f32,
13608        speed_accuracy: 0.0_f32,
13609        horiz_accuracy: 0.0_f32,
13610        vert_accuracy: 0.0_f32,
13611        ignore_flags: GpsInputIgnoreFlags::DEFAULT,
13612        time_week: 0_u16,
13613        gps_id: 0_u8,
13614        fix_type: 0_u8,
13615        satellites_visible: 0_u8,
13616        yaw: 0_u16,
13617    };
13618    #[cfg(feature = "arbitrary")]
13619    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
13620        use arbitrary::{Arbitrary, Unstructured};
13621        let mut buf = [0u8; 1024];
13622        rng.fill_bytes(&mut buf);
13623        let mut unstructured = Unstructured::new(&buf);
13624        Self::arbitrary(&mut unstructured).unwrap_or_default()
13625    }
13626}
13627impl Default for GPS_INPUT_DATA {
13628    fn default() -> Self {
13629        Self::DEFAULT.clone()
13630    }
13631}
13632impl MessageData for GPS_INPUT_DATA {
13633    type Message = MavMessage;
13634    const ID: u32 = 232u32;
13635    const NAME: &'static str = "GPS_INPUT";
13636    const EXTRA_CRC: u8 = 151u8;
13637    const ENCODED_LEN: usize = 65usize;
13638    fn deser(
13639        _version: MavlinkVersion,
13640        __input: &[u8],
13641    ) -> Result<Self, ::mavlink_core::error::ParserError> {
13642        let avail_len = __input.len();
13643        let mut payload_buf = [0; Self::ENCODED_LEN];
13644        let mut buf = if avail_len < Self::ENCODED_LEN {
13645            payload_buf[0..avail_len].copy_from_slice(__input);
13646            Bytes::new(&payload_buf)
13647        } else {
13648            Bytes::new(__input)
13649        };
13650        let mut __struct = Self::default();
13651        __struct.time_usec = buf.get_u64_le();
13652        __struct.time_week_ms = buf.get_u32_le();
13653        __struct.lat = buf.get_i32_le();
13654        __struct.lon = buf.get_i32_le();
13655        __struct.alt = buf.get_f32_le();
13656        __struct.hdop = buf.get_f32_le();
13657        __struct.vdop = buf.get_f32_le();
13658        __struct.vn = buf.get_f32_le();
13659        __struct.ve = buf.get_f32_le();
13660        __struct.vd = buf.get_f32_le();
13661        __struct.speed_accuracy = buf.get_f32_le();
13662        __struct.horiz_accuracy = buf.get_f32_le();
13663        __struct.vert_accuracy = buf.get_f32_le();
13664        let tmp = buf.get_u16_le();
13665        __struct.ignore_flags = GpsInputIgnoreFlags::from_bits(
13666            tmp & GpsInputIgnoreFlags::all().bits(),
13667        )
13668        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
13669            flag_type: "GpsInputIgnoreFlags",
13670            value: tmp as u32,
13671        })?;
13672        __struct.time_week = buf.get_u16_le();
13673        __struct.gps_id = buf.get_u8();
13674        __struct.fix_type = buf.get_u8();
13675        __struct.satellites_visible = buf.get_u8();
13676        __struct.yaw = buf.get_u16_le();
13677        Ok(__struct)
13678    }
13679    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
13680        let mut __tmp = BytesMut::new(bytes);
13681        #[allow(clippy::absurd_extreme_comparisons)]
13682        #[allow(unused_comparisons)]
13683        if __tmp.remaining() < Self::ENCODED_LEN {
13684            panic!(
13685                "buffer is too small (need {} bytes, but got {})",
13686                Self::ENCODED_LEN,
13687                __tmp.remaining(),
13688            )
13689        }
13690        __tmp.put_u64_le(self.time_usec);
13691        __tmp.put_u32_le(self.time_week_ms);
13692        __tmp.put_i32_le(self.lat);
13693        __tmp.put_i32_le(self.lon);
13694        __tmp.put_f32_le(self.alt);
13695        __tmp.put_f32_le(self.hdop);
13696        __tmp.put_f32_le(self.vdop);
13697        __tmp.put_f32_le(self.vn);
13698        __tmp.put_f32_le(self.ve);
13699        __tmp.put_f32_le(self.vd);
13700        __tmp.put_f32_le(self.speed_accuracy);
13701        __tmp.put_f32_le(self.horiz_accuracy);
13702        __tmp.put_f32_le(self.vert_accuracy);
13703        __tmp.put_u16_le(self.ignore_flags.bits());
13704        __tmp.put_u16_le(self.time_week);
13705        __tmp.put_u8(self.gps_id);
13706        __tmp.put_u8(self.fix_type);
13707        __tmp.put_u8(self.satellites_visible);
13708        __tmp.put_u16_le(self.yaw);
13709        if matches!(version, MavlinkVersion::V2) {
13710            let len = __tmp.len();
13711            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
13712        } else {
13713            __tmp.len()
13714        }
13715    }
13716}
13717#[doc = "id: 24"]
13718#[doc = "The global position, as returned by the Global Positioning System (GPS). This is                 NOT the global position estimate of the system, but rather a RAW sensor value. See message GLOBAL_POSITION_INT for the global position estimate."]
13719#[derive(Debug, Clone, PartialEq)]
13720#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13721#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13722pub struct GPS_RAW_INT_DATA {
13723    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
13724    pub time_usec: u64,
13725    #[doc = "Latitude (WGS84, EGM96 ellipsoid)"]
13726    pub lat: i32,
13727    #[doc = "Longitude (WGS84, EGM96 ellipsoid)"]
13728    pub lon: i32,
13729    #[doc = "Altitude (MSL). Positive for up. Note that virtually all GPS modules provide the MSL altitude in addition to the WGS84 altitude."]
13730    pub alt: i32,
13731    #[doc = "GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX"]
13732    pub eph: u16,
13733    #[doc = "GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX"]
13734    pub epv: u16,
13735    #[doc = "GPS ground speed. If unknown, set to: UINT16_MAX"]
13736    pub vel: u16,
13737    #[doc = "Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX"]
13738    pub cog: u16,
13739    #[doc = "GPS fix type."]
13740    pub fix_type: GpsFixType,
13741    #[doc = "Number of satellites visible. If unknown, set to UINT8_MAX"]
13742    pub satellites_visible: u8,
13743    #[doc = "Altitude (above WGS84, EGM96 ellipsoid). Positive for up."]
13744    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13745    pub alt_ellipsoid: i32,
13746    #[doc = "Position uncertainty."]
13747    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13748    pub h_acc: u32,
13749    #[doc = "Altitude uncertainty."]
13750    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13751    pub v_acc: u32,
13752    #[doc = "Speed uncertainty."]
13753    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13754    pub vel_acc: u32,
13755    #[doc = "Heading / track uncertainty"]
13756    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13757    pub hdg_acc: u32,
13758    #[doc = "Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north."]
13759    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
13760    pub yaw: u16,
13761}
13762impl GPS_RAW_INT_DATA {
13763    pub const ENCODED_LEN: usize = 52usize;
13764    pub const DEFAULT: Self = Self {
13765        time_usec: 0_u64,
13766        lat: 0_i32,
13767        lon: 0_i32,
13768        alt: 0_i32,
13769        eph: 0_u16,
13770        epv: 0_u16,
13771        vel: 0_u16,
13772        cog: 0_u16,
13773        fix_type: GpsFixType::DEFAULT,
13774        satellites_visible: 0_u8,
13775        alt_ellipsoid: 0_i32,
13776        h_acc: 0_u32,
13777        v_acc: 0_u32,
13778        vel_acc: 0_u32,
13779        hdg_acc: 0_u32,
13780        yaw: 0_u16,
13781    };
13782    #[cfg(feature = "arbitrary")]
13783    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
13784        use arbitrary::{Arbitrary, Unstructured};
13785        let mut buf = [0u8; 1024];
13786        rng.fill_bytes(&mut buf);
13787        let mut unstructured = Unstructured::new(&buf);
13788        Self::arbitrary(&mut unstructured).unwrap_or_default()
13789    }
13790}
13791impl Default for GPS_RAW_INT_DATA {
13792    fn default() -> Self {
13793        Self::DEFAULT.clone()
13794    }
13795}
13796impl MessageData for GPS_RAW_INT_DATA {
13797    type Message = MavMessage;
13798    const ID: u32 = 24u32;
13799    const NAME: &'static str = "GPS_RAW_INT";
13800    const EXTRA_CRC: u8 = 24u8;
13801    const ENCODED_LEN: usize = 52usize;
13802    fn deser(
13803        _version: MavlinkVersion,
13804        __input: &[u8],
13805    ) -> Result<Self, ::mavlink_core::error::ParserError> {
13806        let avail_len = __input.len();
13807        let mut payload_buf = [0; Self::ENCODED_LEN];
13808        let mut buf = if avail_len < Self::ENCODED_LEN {
13809            payload_buf[0..avail_len].copy_from_slice(__input);
13810            Bytes::new(&payload_buf)
13811        } else {
13812            Bytes::new(__input)
13813        };
13814        let mut __struct = Self::default();
13815        __struct.time_usec = buf.get_u64_le();
13816        __struct.lat = buf.get_i32_le();
13817        __struct.lon = buf.get_i32_le();
13818        __struct.alt = buf.get_i32_le();
13819        __struct.eph = buf.get_u16_le();
13820        __struct.epv = buf.get_u16_le();
13821        __struct.vel = buf.get_u16_le();
13822        __struct.cog = buf.get_u16_le();
13823        let tmp = buf.get_u8();
13824        __struct.fix_type =
13825            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
13826                enum_type: "GpsFixType",
13827                value: tmp as u32,
13828            })?;
13829        __struct.satellites_visible = buf.get_u8();
13830        __struct.alt_ellipsoid = buf.get_i32_le();
13831        __struct.h_acc = buf.get_u32_le();
13832        __struct.v_acc = buf.get_u32_le();
13833        __struct.vel_acc = buf.get_u32_le();
13834        __struct.hdg_acc = buf.get_u32_le();
13835        __struct.yaw = buf.get_u16_le();
13836        Ok(__struct)
13837    }
13838    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
13839        let mut __tmp = BytesMut::new(bytes);
13840        #[allow(clippy::absurd_extreme_comparisons)]
13841        #[allow(unused_comparisons)]
13842        if __tmp.remaining() < Self::ENCODED_LEN {
13843            panic!(
13844                "buffer is too small (need {} bytes, but got {})",
13845                Self::ENCODED_LEN,
13846                __tmp.remaining(),
13847            )
13848        }
13849        __tmp.put_u64_le(self.time_usec);
13850        __tmp.put_i32_le(self.lat);
13851        __tmp.put_i32_le(self.lon);
13852        __tmp.put_i32_le(self.alt);
13853        __tmp.put_u16_le(self.eph);
13854        __tmp.put_u16_le(self.epv);
13855        __tmp.put_u16_le(self.vel);
13856        __tmp.put_u16_le(self.cog);
13857        __tmp.put_u8(self.fix_type as u8);
13858        __tmp.put_u8(self.satellites_visible);
13859        __tmp.put_i32_le(self.alt_ellipsoid);
13860        __tmp.put_u32_le(self.h_acc);
13861        __tmp.put_u32_le(self.v_acc);
13862        __tmp.put_u32_le(self.vel_acc);
13863        __tmp.put_u32_le(self.hdg_acc);
13864        __tmp.put_u16_le(self.yaw);
13865        if matches!(version, MavlinkVersion::V2) {
13866            let len = __tmp.len();
13867            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
13868        } else {
13869            __tmp.len()
13870        }
13871    }
13872}
13873#[doc = "id: 233"]
13874#[doc = "RTCM message for injecting into the onboard GPS (used for DGPS)."]
13875#[derive(Debug, Clone, PartialEq)]
13876#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13877#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13878pub struct GPS_RTCM_DATA_DATA {
13879    #[doc = "LSB: 1 means message is fragmented, next 2 bits are the fragment ID, the remaining 5 bits are used for the sequence ID. Messages are only to be flushed to the GPS when the entire message has been reconstructed on the autopilot. The fragment ID specifies which order the fragments should be assembled into a buffer, while the sequence ID is used to detect a mismatch between different buffers. The buffer is considered fully reconstructed when either all 4 fragments are present, or all the fragments before the first fragment with a non full payload is received. This management is used to ensure that normal GPS operation doesn't corrupt RTCM data, and to recover from a unreliable transport delivery order."]
13880    pub flags: u8,
13881    #[doc = "data length"]
13882    pub len: u8,
13883    #[doc = "RTCM message (may be fragmented)"]
13884    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
13885    pub data: [u8; 180],
13886}
13887impl GPS_RTCM_DATA_DATA {
13888    pub const ENCODED_LEN: usize = 182usize;
13889    pub const DEFAULT: Self = Self {
13890        flags: 0_u8,
13891        len: 0_u8,
13892        data: [0_u8; 180usize],
13893    };
13894    #[cfg(feature = "arbitrary")]
13895    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
13896        use arbitrary::{Arbitrary, Unstructured};
13897        let mut buf = [0u8; 1024];
13898        rng.fill_bytes(&mut buf);
13899        let mut unstructured = Unstructured::new(&buf);
13900        Self::arbitrary(&mut unstructured).unwrap_or_default()
13901    }
13902}
13903impl Default for GPS_RTCM_DATA_DATA {
13904    fn default() -> Self {
13905        Self::DEFAULT.clone()
13906    }
13907}
13908impl MessageData for GPS_RTCM_DATA_DATA {
13909    type Message = MavMessage;
13910    const ID: u32 = 233u32;
13911    const NAME: &'static str = "GPS_RTCM_DATA";
13912    const EXTRA_CRC: u8 = 35u8;
13913    const ENCODED_LEN: usize = 182usize;
13914    fn deser(
13915        _version: MavlinkVersion,
13916        __input: &[u8],
13917    ) -> Result<Self, ::mavlink_core::error::ParserError> {
13918        let avail_len = __input.len();
13919        let mut payload_buf = [0; Self::ENCODED_LEN];
13920        let mut buf = if avail_len < Self::ENCODED_LEN {
13921            payload_buf[0..avail_len].copy_from_slice(__input);
13922            Bytes::new(&payload_buf)
13923        } else {
13924            Bytes::new(__input)
13925        };
13926        let mut __struct = Self::default();
13927        __struct.flags = buf.get_u8();
13928        __struct.len = buf.get_u8();
13929        for v in &mut __struct.data {
13930            let val = buf.get_u8();
13931            *v = val;
13932        }
13933        Ok(__struct)
13934    }
13935    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
13936        let mut __tmp = BytesMut::new(bytes);
13937        #[allow(clippy::absurd_extreme_comparisons)]
13938        #[allow(unused_comparisons)]
13939        if __tmp.remaining() < Self::ENCODED_LEN {
13940            panic!(
13941                "buffer is too small (need {} bytes, but got {})",
13942                Self::ENCODED_LEN,
13943                __tmp.remaining(),
13944            )
13945        }
13946        __tmp.put_u8(self.flags);
13947        __tmp.put_u8(self.len);
13948        for val in &self.data {
13949            __tmp.put_u8(*val);
13950        }
13951        if matches!(version, MavlinkVersion::V2) {
13952            let len = __tmp.len();
13953            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
13954        } else {
13955            __tmp.len()
13956        }
13957    }
13958}
13959#[doc = "id: 127"]
13960#[doc = "RTK GPS data. Gives information on the relative baseline calculation the GPS is reporting."]
13961#[derive(Debug, Clone, PartialEq)]
13962#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13963#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13964pub struct GPS_RTK_DATA {
13965    #[doc = "Time since boot of last baseline message received."]
13966    pub time_last_baseline_ms: u32,
13967    #[doc = "GPS Time of Week of last baseline"]
13968    pub tow: u32,
13969    #[doc = "Current baseline in ECEF x or NED north component."]
13970    pub baseline_a_mm: i32,
13971    #[doc = "Current baseline in ECEF y or NED east component."]
13972    pub baseline_b_mm: i32,
13973    #[doc = "Current baseline in ECEF z or NED down component."]
13974    pub baseline_c_mm: i32,
13975    #[doc = "Current estimate of baseline accuracy."]
13976    pub accuracy: u32,
13977    #[doc = "Current number of integer ambiguity hypotheses."]
13978    pub iar_num_hypotheses: i32,
13979    #[doc = "GPS Week Number of last baseline"]
13980    pub wn: u16,
13981    #[doc = "Identification of connected RTK receiver."]
13982    pub rtk_receiver_id: u8,
13983    #[doc = "GPS-specific health report for RTK data."]
13984    pub rtk_health: u8,
13985    #[doc = "Rate of baseline messages being received by GPS"]
13986    pub rtk_rate: u8,
13987    #[doc = "Current number of sats used for RTK calculation."]
13988    pub nsats: u8,
13989    #[doc = "Coordinate system of baseline"]
13990    pub baseline_coords_type: RtkBaselineCoordinateSystem,
13991}
13992impl GPS_RTK_DATA {
13993    pub const ENCODED_LEN: usize = 35usize;
13994    pub const DEFAULT: Self = Self {
13995        time_last_baseline_ms: 0_u32,
13996        tow: 0_u32,
13997        baseline_a_mm: 0_i32,
13998        baseline_b_mm: 0_i32,
13999        baseline_c_mm: 0_i32,
14000        accuracy: 0_u32,
14001        iar_num_hypotheses: 0_i32,
14002        wn: 0_u16,
14003        rtk_receiver_id: 0_u8,
14004        rtk_health: 0_u8,
14005        rtk_rate: 0_u8,
14006        nsats: 0_u8,
14007        baseline_coords_type: RtkBaselineCoordinateSystem::DEFAULT,
14008    };
14009    #[cfg(feature = "arbitrary")]
14010    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
14011        use arbitrary::{Arbitrary, Unstructured};
14012        let mut buf = [0u8; 1024];
14013        rng.fill_bytes(&mut buf);
14014        let mut unstructured = Unstructured::new(&buf);
14015        Self::arbitrary(&mut unstructured).unwrap_or_default()
14016    }
14017}
14018impl Default for GPS_RTK_DATA {
14019    fn default() -> Self {
14020        Self::DEFAULT.clone()
14021    }
14022}
14023impl MessageData for GPS_RTK_DATA {
14024    type Message = MavMessage;
14025    const ID: u32 = 127u32;
14026    const NAME: &'static str = "GPS_RTK";
14027    const EXTRA_CRC: u8 = 25u8;
14028    const ENCODED_LEN: usize = 35usize;
14029    fn deser(
14030        _version: MavlinkVersion,
14031        __input: &[u8],
14032    ) -> Result<Self, ::mavlink_core::error::ParserError> {
14033        let avail_len = __input.len();
14034        let mut payload_buf = [0; Self::ENCODED_LEN];
14035        let mut buf = if avail_len < Self::ENCODED_LEN {
14036            payload_buf[0..avail_len].copy_from_slice(__input);
14037            Bytes::new(&payload_buf)
14038        } else {
14039            Bytes::new(__input)
14040        };
14041        let mut __struct = Self::default();
14042        __struct.time_last_baseline_ms = buf.get_u32_le();
14043        __struct.tow = buf.get_u32_le();
14044        __struct.baseline_a_mm = buf.get_i32_le();
14045        __struct.baseline_b_mm = buf.get_i32_le();
14046        __struct.baseline_c_mm = buf.get_i32_le();
14047        __struct.accuracy = buf.get_u32_le();
14048        __struct.iar_num_hypotheses = buf.get_i32_le();
14049        __struct.wn = buf.get_u16_le();
14050        __struct.rtk_receiver_id = buf.get_u8();
14051        __struct.rtk_health = buf.get_u8();
14052        __struct.rtk_rate = buf.get_u8();
14053        __struct.nsats = buf.get_u8();
14054        let tmp = buf.get_u8();
14055        __struct.baseline_coords_type =
14056            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
14057                enum_type: "RtkBaselineCoordinateSystem",
14058                value: tmp as u32,
14059            })?;
14060        Ok(__struct)
14061    }
14062    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
14063        let mut __tmp = BytesMut::new(bytes);
14064        #[allow(clippy::absurd_extreme_comparisons)]
14065        #[allow(unused_comparisons)]
14066        if __tmp.remaining() < Self::ENCODED_LEN {
14067            panic!(
14068                "buffer is too small (need {} bytes, but got {})",
14069                Self::ENCODED_LEN,
14070                __tmp.remaining(),
14071            )
14072        }
14073        __tmp.put_u32_le(self.time_last_baseline_ms);
14074        __tmp.put_u32_le(self.tow);
14075        __tmp.put_i32_le(self.baseline_a_mm);
14076        __tmp.put_i32_le(self.baseline_b_mm);
14077        __tmp.put_i32_le(self.baseline_c_mm);
14078        __tmp.put_u32_le(self.accuracy);
14079        __tmp.put_i32_le(self.iar_num_hypotheses);
14080        __tmp.put_u16_le(self.wn);
14081        __tmp.put_u8(self.rtk_receiver_id);
14082        __tmp.put_u8(self.rtk_health);
14083        __tmp.put_u8(self.rtk_rate);
14084        __tmp.put_u8(self.nsats);
14085        __tmp.put_u8(self.baseline_coords_type as u8);
14086        if matches!(version, MavlinkVersion::V2) {
14087            let len = __tmp.len();
14088            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
14089        } else {
14090            __tmp.len()
14091        }
14092    }
14093}
14094#[doc = "id: 25"]
14095#[doc = "The positioning status, as reported by GPS. This message is intended to display status information about each satellite visible to the receiver. See message GLOBAL_POSITION_INT for the global position estimate. This message can contain information for up to 20 satellites."]
14096#[derive(Debug, Clone, PartialEq)]
14097#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
14098#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14099pub struct GPS_STATUS_DATA {
14100    #[doc = "Number of satellites visible"]
14101    pub satellites_visible: u8,
14102    #[doc = "Global satellite ID"]
14103    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
14104    pub satellite_prn: [u8; 20],
14105    #[doc = "0: Satellite not used, 1: used for localization"]
14106    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
14107    pub satellite_used: [u8; 20],
14108    #[doc = "Elevation (0: right on top of receiver, 90: on the horizon) of satellite"]
14109    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
14110    pub satellite_elevation: [u8; 20],
14111    #[doc = "Direction of satellite, 0: 0 deg, 255: 360 deg."]
14112    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
14113    pub satellite_azimuth: [u8; 20],
14114    #[doc = "Signal to noise ratio of satellite"]
14115    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
14116    pub satellite_snr: [u8; 20],
14117}
14118impl GPS_STATUS_DATA {
14119    pub const ENCODED_LEN: usize = 101usize;
14120    pub const DEFAULT: Self = Self {
14121        satellites_visible: 0_u8,
14122        satellite_prn: [0_u8; 20usize],
14123        satellite_used: [0_u8; 20usize],
14124        satellite_elevation: [0_u8; 20usize],
14125        satellite_azimuth: [0_u8; 20usize],
14126        satellite_snr: [0_u8; 20usize],
14127    };
14128    #[cfg(feature = "arbitrary")]
14129    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
14130        use arbitrary::{Arbitrary, Unstructured};
14131        let mut buf = [0u8; 1024];
14132        rng.fill_bytes(&mut buf);
14133        let mut unstructured = Unstructured::new(&buf);
14134        Self::arbitrary(&mut unstructured).unwrap_or_default()
14135    }
14136}
14137impl Default for GPS_STATUS_DATA {
14138    fn default() -> Self {
14139        Self::DEFAULT.clone()
14140    }
14141}
14142impl MessageData for GPS_STATUS_DATA {
14143    type Message = MavMessage;
14144    const ID: u32 = 25u32;
14145    const NAME: &'static str = "GPS_STATUS";
14146    const EXTRA_CRC: u8 = 23u8;
14147    const ENCODED_LEN: usize = 101usize;
14148    fn deser(
14149        _version: MavlinkVersion,
14150        __input: &[u8],
14151    ) -> Result<Self, ::mavlink_core::error::ParserError> {
14152        let avail_len = __input.len();
14153        let mut payload_buf = [0; Self::ENCODED_LEN];
14154        let mut buf = if avail_len < Self::ENCODED_LEN {
14155            payload_buf[0..avail_len].copy_from_slice(__input);
14156            Bytes::new(&payload_buf)
14157        } else {
14158            Bytes::new(__input)
14159        };
14160        let mut __struct = Self::default();
14161        __struct.satellites_visible = buf.get_u8();
14162        for v in &mut __struct.satellite_prn {
14163            let val = buf.get_u8();
14164            *v = val;
14165        }
14166        for v in &mut __struct.satellite_used {
14167            let val = buf.get_u8();
14168            *v = val;
14169        }
14170        for v in &mut __struct.satellite_elevation {
14171            let val = buf.get_u8();
14172            *v = val;
14173        }
14174        for v in &mut __struct.satellite_azimuth {
14175            let val = buf.get_u8();
14176            *v = val;
14177        }
14178        for v in &mut __struct.satellite_snr {
14179            let val = buf.get_u8();
14180            *v = val;
14181        }
14182        Ok(__struct)
14183    }
14184    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
14185        let mut __tmp = BytesMut::new(bytes);
14186        #[allow(clippy::absurd_extreme_comparisons)]
14187        #[allow(unused_comparisons)]
14188        if __tmp.remaining() < Self::ENCODED_LEN {
14189            panic!(
14190                "buffer is too small (need {} bytes, but got {})",
14191                Self::ENCODED_LEN,
14192                __tmp.remaining(),
14193            )
14194        }
14195        __tmp.put_u8(self.satellites_visible);
14196        for val in &self.satellite_prn {
14197            __tmp.put_u8(*val);
14198        }
14199        for val in &self.satellite_used {
14200            __tmp.put_u8(*val);
14201        }
14202        for val in &self.satellite_elevation {
14203            __tmp.put_u8(*val);
14204        }
14205        for val in &self.satellite_azimuth {
14206            __tmp.put_u8(*val);
14207        }
14208        for val in &self.satellite_snr {
14209            __tmp.put_u8(*val);
14210        }
14211        if matches!(version, MavlinkVersion::V2) {
14212            let len = __tmp.len();
14213            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
14214        } else {
14215            __tmp.len()
14216        }
14217    }
14218}
14219#[doc = "id: 0"]
14220#[doc = "The heartbeat message shows that a system or component is present and responding. The type and autopilot fields (along with the message component id), allow the receiving system to treat further messages from this system appropriately (e.g. by laying out the user interface based on the autopilot). This microservice is documented at <https://mavlink.io/en/services/heartbeat.html>."]
14221#[derive(Debug, Clone, PartialEq)]
14222#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
14223#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14224pub struct HEARTBEAT_DATA {
14225    #[doc = "A bitfield for use for autopilot-specific flags"]
14226    pub custom_mode: u32,
14227    #[doc = "Vehicle or component type. For a flight controller component the vehicle type (quadrotor, helicopter, etc.). For other components the component type (e.g. camera, gimbal, etc.). This should be used in preference to component id for identifying the component type."]
14228    pub mavtype: MavType,
14229    #[doc = "Autopilot type / class. Use MAV_AUTOPILOT_INVALID for components that are not flight controllers."]
14230    pub autopilot: MavAutopilot,
14231    #[doc = "System mode bitmap."]
14232    pub base_mode: MavModeFlag,
14233    #[doc = "System status flag."]
14234    pub system_status: MavState,
14235    #[doc = "MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version"]
14236    pub mavlink_version: u8,
14237}
14238impl HEARTBEAT_DATA {
14239    pub const ENCODED_LEN: usize = 9usize;
14240    pub const DEFAULT: Self = Self {
14241        custom_mode: 0_u32,
14242        mavtype: MavType::DEFAULT,
14243        autopilot: MavAutopilot::DEFAULT,
14244        base_mode: MavModeFlag::DEFAULT,
14245        system_status: MavState::DEFAULT,
14246        mavlink_version: 0_u8,
14247    };
14248    #[cfg(feature = "arbitrary")]
14249    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
14250        use arbitrary::{Arbitrary, Unstructured};
14251        let mut buf = [0u8; 1024];
14252        rng.fill_bytes(&mut buf);
14253        let mut unstructured = Unstructured::new(&buf);
14254        Self::arbitrary(&mut unstructured).unwrap_or_default()
14255    }
14256}
14257impl Default for HEARTBEAT_DATA {
14258    fn default() -> Self {
14259        Self::DEFAULT.clone()
14260    }
14261}
14262impl MessageData for HEARTBEAT_DATA {
14263    type Message = MavMessage;
14264    const ID: u32 = 0u32;
14265    const NAME: &'static str = "HEARTBEAT";
14266    const EXTRA_CRC: u8 = 50u8;
14267    const ENCODED_LEN: usize = 9usize;
14268    fn deser(
14269        _version: MavlinkVersion,
14270        __input: &[u8],
14271    ) -> Result<Self, ::mavlink_core::error::ParserError> {
14272        let avail_len = __input.len();
14273        let mut payload_buf = [0; Self::ENCODED_LEN];
14274        let mut buf = if avail_len < Self::ENCODED_LEN {
14275            payload_buf[0..avail_len].copy_from_slice(__input);
14276            Bytes::new(&payload_buf)
14277        } else {
14278            Bytes::new(__input)
14279        };
14280        let mut __struct = Self::default();
14281        __struct.custom_mode = buf.get_u32_le();
14282        let tmp = buf.get_u8();
14283        __struct.mavtype =
14284            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
14285                enum_type: "MavType",
14286                value: tmp as u32,
14287            })?;
14288        let tmp = buf.get_u8();
14289        __struct.autopilot =
14290            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
14291                enum_type: "MavAutopilot",
14292                value: tmp as u32,
14293            })?;
14294        let tmp = buf.get_u8();
14295        __struct.base_mode = MavModeFlag::from_bits(tmp & MavModeFlag::all().bits()).ok_or(
14296            ::mavlink_core::error::ParserError::InvalidFlag {
14297                flag_type: "MavModeFlag",
14298                value: tmp as u32,
14299            },
14300        )?;
14301        let tmp = buf.get_u8();
14302        __struct.system_status =
14303            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
14304                enum_type: "MavState",
14305                value: tmp as u32,
14306            })?;
14307        __struct.mavlink_version = buf.get_u8();
14308        Ok(__struct)
14309    }
14310    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
14311        let mut __tmp = BytesMut::new(bytes);
14312        #[allow(clippy::absurd_extreme_comparisons)]
14313        #[allow(unused_comparisons)]
14314        if __tmp.remaining() < Self::ENCODED_LEN {
14315            panic!(
14316                "buffer is too small (need {} bytes, but got {})",
14317                Self::ENCODED_LEN,
14318                __tmp.remaining(),
14319            )
14320        }
14321        __tmp.put_u32_le(self.custom_mode);
14322        __tmp.put_u8(self.mavtype as u8);
14323        __tmp.put_u8(self.autopilot as u8);
14324        __tmp.put_u8(self.base_mode.bits());
14325        __tmp.put_u8(self.system_status as u8);
14326        __tmp.put_u8(self.mavlink_version);
14327        if matches!(version, MavlinkVersion::V2) {
14328            let len = __tmp.len();
14329            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
14330        } else {
14331            __tmp.len()
14332        }
14333    }
14334}
14335#[doc = "id: 105"]
14336#[doc = "The IMU readings in SI units in NED body frame."]
14337#[derive(Debug, Clone, PartialEq)]
14338#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
14339#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14340pub struct HIGHRES_IMU_DATA {
14341    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
14342    pub time_usec: u64,
14343    #[doc = "X acceleration"]
14344    pub xacc: f32,
14345    #[doc = "Y acceleration"]
14346    pub yacc: f32,
14347    #[doc = "Z acceleration"]
14348    pub zacc: f32,
14349    #[doc = "Angular speed around X axis"]
14350    pub xgyro: f32,
14351    #[doc = "Angular speed around Y axis"]
14352    pub ygyro: f32,
14353    #[doc = "Angular speed around Z axis"]
14354    pub zgyro: f32,
14355    #[doc = "X Magnetic field"]
14356    pub xmag: f32,
14357    #[doc = "Y Magnetic field"]
14358    pub ymag: f32,
14359    #[doc = "Z Magnetic field"]
14360    pub zmag: f32,
14361    #[doc = "Absolute pressure"]
14362    pub abs_pressure: f32,
14363    #[doc = "Differential pressure"]
14364    pub diff_pressure: f32,
14365    #[doc = "Altitude calculated from pressure"]
14366    pub pressure_alt: f32,
14367    #[doc = "Temperature"]
14368    pub temperature: f32,
14369    #[doc = "Bitmap for fields that have updated since last message"]
14370    pub fields_updated: HighresImuUpdatedFlags,
14371    #[doc = "Id. Ids are numbered from 0 and map to IMUs numbered from 1 (e.g. IMU1 will have a message with id=0)"]
14372    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
14373    pub id: u8,
14374}
14375impl HIGHRES_IMU_DATA {
14376    pub const ENCODED_LEN: usize = 63usize;
14377    pub const DEFAULT: Self = Self {
14378        time_usec: 0_u64,
14379        xacc: 0.0_f32,
14380        yacc: 0.0_f32,
14381        zacc: 0.0_f32,
14382        xgyro: 0.0_f32,
14383        ygyro: 0.0_f32,
14384        zgyro: 0.0_f32,
14385        xmag: 0.0_f32,
14386        ymag: 0.0_f32,
14387        zmag: 0.0_f32,
14388        abs_pressure: 0.0_f32,
14389        diff_pressure: 0.0_f32,
14390        pressure_alt: 0.0_f32,
14391        temperature: 0.0_f32,
14392        fields_updated: HighresImuUpdatedFlags::DEFAULT,
14393        id: 0_u8,
14394    };
14395    #[cfg(feature = "arbitrary")]
14396    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
14397        use arbitrary::{Arbitrary, Unstructured};
14398        let mut buf = [0u8; 1024];
14399        rng.fill_bytes(&mut buf);
14400        let mut unstructured = Unstructured::new(&buf);
14401        Self::arbitrary(&mut unstructured).unwrap_or_default()
14402    }
14403}
14404impl Default for HIGHRES_IMU_DATA {
14405    fn default() -> Self {
14406        Self::DEFAULT.clone()
14407    }
14408}
14409impl MessageData for HIGHRES_IMU_DATA {
14410    type Message = MavMessage;
14411    const ID: u32 = 105u32;
14412    const NAME: &'static str = "HIGHRES_IMU";
14413    const EXTRA_CRC: u8 = 93u8;
14414    const ENCODED_LEN: usize = 63usize;
14415    fn deser(
14416        _version: MavlinkVersion,
14417        __input: &[u8],
14418    ) -> Result<Self, ::mavlink_core::error::ParserError> {
14419        let avail_len = __input.len();
14420        let mut payload_buf = [0; Self::ENCODED_LEN];
14421        let mut buf = if avail_len < Self::ENCODED_LEN {
14422            payload_buf[0..avail_len].copy_from_slice(__input);
14423            Bytes::new(&payload_buf)
14424        } else {
14425            Bytes::new(__input)
14426        };
14427        let mut __struct = Self::default();
14428        __struct.time_usec = buf.get_u64_le();
14429        __struct.xacc = buf.get_f32_le();
14430        __struct.yacc = buf.get_f32_le();
14431        __struct.zacc = buf.get_f32_le();
14432        __struct.xgyro = buf.get_f32_le();
14433        __struct.ygyro = buf.get_f32_le();
14434        __struct.zgyro = buf.get_f32_le();
14435        __struct.xmag = buf.get_f32_le();
14436        __struct.ymag = buf.get_f32_le();
14437        __struct.zmag = buf.get_f32_le();
14438        __struct.abs_pressure = buf.get_f32_le();
14439        __struct.diff_pressure = buf.get_f32_le();
14440        __struct.pressure_alt = buf.get_f32_le();
14441        __struct.temperature = buf.get_f32_le();
14442        let tmp = buf.get_u16_le();
14443        __struct.fields_updated = HighresImuUpdatedFlags::from_bits(
14444            tmp & HighresImuUpdatedFlags::all().bits(),
14445        )
14446        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
14447            flag_type: "HighresImuUpdatedFlags",
14448            value: tmp as u32,
14449        })?;
14450        __struct.id = buf.get_u8();
14451        Ok(__struct)
14452    }
14453    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
14454        let mut __tmp = BytesMut::new(bytes);
14455        #[allow(clippy::absurd_extreme_comparisons)]
14456        #[allow(unused_comparisons)]
14457        if __tmp.remaining() < Self::ENCODED_LEN {
14458            panic!(
14459                "buffer is too small (need {} bytes, but got {})",
14460                Self::ENCODED_LEN,
14461                __tmp.remaining(),
14462            )
14463        }
14464        __tmp.put_u64_le(self.time_usec);
14465        __tmp.put_f32_le(self.xacc);
14466        __tmp.put_f32_le(self.yacc);
14467        __tmp.put_f32_le(self.zacc);
14468        __tmp.put_f32_le(self.xgyro);
14469        __tmp.put_f32_le(self.ygyro);
14470        __tmp.put_f32_le(self.zgyro);
14471        __tmp.put_f32_le(self.xmag);
14472        __tmp.put_f32_le(self.ymag);
14473        __tmp.put_f32_le(self.zmag);
14474        __tmp.put_f32_le(self.abs_pressure);
14475        __tmp.put_f32_le(self.diff_pressure);
14476        __tmp.put_f32_le(self.pressure_alt);
14477        __tmp.put_f32_le(self.temperature);
14478        __tmp.put_u16_le(self.fields_updated.bits());
14479        __tmp.put_u8(self.id);
14480        if matches!(version, MavlinkVersion::V2) {
14481            let len = __tmp.len();
14482            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
14483        } else {
14484            __tmp.len()
14485        }
14486    }
14487}
14488#[deprecated = " See `HIGH_LATENCY2` (Deprecated since 2020-10)"]
14489#[doc = "id: 234"]
14490#[doc = "Message appropriate for high latency connections like Iridium."]
14491#[derive(Debug, Clone, PartialEq)]
14492#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
14493#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14494pub struct HIGH_LATENCY_DATA {
14495    #[doc = "A bitfield for use for autopilot-specific flags."]
14496    pub custom_mode: u32,
14497    #[doc = "Latitude"]
14498    pub latitude: i32,
14499    #[doc = "Longitude"]
14500    pub longitude: i32,
14501    #[doc = "roll"]
14502    pub roll: i16,
14503    #[doc = "pitch"]
14504    pub pitch: i16,
14505    #[doc = "heading"]
14506    pub heading: u16,
14507    #[doc = "heading setpoint"]
14508    pub heading_sp: i16,
14509    #[doc = "Altitude above mean sea level"]
14510    pub altitude_amsl: i16,
14511    #[doc = "Altitude setpoint relative to the home position"]
14512    pub altitude_sp: i16,
14513    #[doc = "distance to target"]
14514    pub wp_distance: u16,
14515    #[doc = "Bitmap of enabled system modes."]
14516    pub base_mode: MavModeFlag,
14517    #[doc = "The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown."]
14518    pub landed_state: MavLandedState,
14519    #[doc = "throttle (percentage)"]
14520    pub throttle: i8,
14521    #[doc = "airspeed"]
14522    pub airspeed: u8,
14523    #[doc = "airspeed setpoint"]
14524    pub airspeed_sp: u8,
14525    #[doc = "groundspeed"]
14526    pub groundspeed: u8,
14527    #[doc = "climb rate"]
14528    pub climb_rate: i8,
14529    #[doc = "Number of satellites visible. If unknown, set to UINT8_MAX"]
14530    pub gps_nsat: u8,
14531    #[doc = "GPS Fix type."]
14532    pub gps_fix_type: GpsFixType,
14533    #[doc = "Remaining battery (percentage)"]
14534    pub battery_remaining: u8,
14535    #[doc = "Autopilot temperature (degrees C)"]
14536    pub temperature: i8,
14537    #[doc = "Air temperature (degrees C) from airspeed sensor"]
14538    pub temperature_air: i8,
14539    #[doc = "failsafe (each bit represents a failsafe where 0=ok, 1=failsafe active (bit0:RC, bit1:batt, bit2:GPS, bit3:GCS, bit4:fence)"]
14540    pub failsafe: u8,
14541    #[doc = "current waypoint number"]
14542    pub wp_num: u8,
14543}
14544impl HIGH_LATENCY_DATA {
14545    pub const ENCODED_LEN: usize = 40usize;
14546    pub const DEFAULT: Self = Self {
14547        custom_mode: 0_u32,
14548        latitude: 0_i32,
14549        longitude: 0_i32,
14550        roll: 0_i16,
14551        pitch: 0_i16,
14552        heading: 0_u16,
14553        heading_sp: 0_i16,
14554        altitude_amsl: 0_i16,
14555        altitude_sp: 0_i16,
14556        wp_distance: 0_u16,
14557        base_mode: MavModeFlag::DEFAULT,
14558        landed_state: MavLandedState::DEFAULT,
14559        throttle: 0_i8,
14560        airspeed: 0_u8,
14561        airspeed_sp: 0_u8,
14562        groundspeed: 0_u8,
14563        climb_rate: 0_i8,
14564        gps_nsat: 0_u8,
14565        gps_fix_type: GpsFixType::DEFAULT,
14566        battery_remaining: 0_u8,
14567        temperature: 0_i8,
14568        temperature_air: 0_i8,
14569        failsafe: 0_u8,
14570        wp_num: 0_u8,
14571    };
14572    #[cfg(feature = "arbitrary")]
14573    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
14574        use arbitrary::{Arbitrary, Unstructured};
14575        let mut buf = [0u8; 1024];
14576        rng.fill_bytes(&mut buf);
14577        let mut unstructured = Unstructured::new(&buf);
14578        Self::arbitrary(&mut unstructured).unwrap_or_default()
14579    }
14580}
14581impl Default for HIGH_LATENCY_DATA {
14582    fn default() -> Self {
14583        Self::DEFAULT.clone()
14584    }
14585}
14586impl MessageData for HIGH_LATENCY_DATA {
14587    type Message = MavMessage;
14588    const ID: u32 = 234u32;
14589    const NAME: &'static str = "HIGH_LATENCY";
14590    const EXTRA_CRC: u8 = 150u8;
14591    const ENCODED_LEN: usize = 40usize;
14592    fn deser(
14593        _version: MavlinkVersion,
14594        __input: &[u8],
14595    ) -> Result<Self, ::mavlink_core::error::ParserError> {
14596        let avail_len = __input.len();
14597        let mut payload_buf = [0; Self::ENCODED_LEN];
14598        let mut buf = if avail_len < Self::ENCODED_LEN {
14599            payload_buf[0..avail_len].copy_from_slice(__input);
14600            Bytes::new(&payload_buf)
14601        } else {
14602            Bytes::new(__input)
14603        };
14604        let mut __struct = Self::default();
14605        __struct.custom_mode = buf.get_u32_le();
14606        __struct.latitude = buf.get_i32_le();
14607        __struct.longitude = buf.get_i32_le();
14608        __struct.roll = buf.get_i16_le();
14609        __struct.pitch = buf.get_i16_le();
14610        __struct.heading = buf.get_u16_le();
14611        __struct.heading_sp = buf.get_i16_le();
14612        __struct.altitude_amsl = buf.get_i16_le();
14613        __struct.altitude_sp = buf.get_i16_le();
14614        __struct.wp_distance = buf.get_u16_le();
14615        let tmp = buf.get_u8();
14616        __struct.base_mode = MavModeFlag::from_bits(tmp & MavModeFlag::all().bits()).ok_or(
14617            ::mavlink_core::error::ParserError::InvalidFlag {
14618                flag_type: "MavModeFlag",
14619                value: tmp as u32,
14620            },
14621        )?;
14622        let tmp = buf.get_u8();
14623        __struct.landed_state =
14624            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
14625                enum_type: "MavLandedState",
14626                value: tmp as u32,
14627            })?;
14628        __struct.throttle = buf.get_i8();
14629        __struct.airspeed = buf.get_u8();
14630        __struct.airspeed_sp = buf.get_u8();
14631        __struct.groundspeed = buf.get_u8();
14632        __struct.climb_rate = buf.get_i8();
14633        __struct.gps_nsat = buf.get_u8();
14634        let tmp = buf.get_u8();
14635        __struct.gps_fix_type =
14636            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
14637                enum_type: "GpsFixType",
14638                value: tmp as u32,
14639            })?;
14640        __struct.battery_remaining = buf.get_u8();
14641        __struct.temperature = buf.get_i8();
14642        __struct.temperature_air = buf.get_i8();
14643        __struct.failsafe = buf.get_u8();
14644        __struct.wp_num = buf.get_u8();
14645        Ok(__struct)
14646    }
14647    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
14648        let mut __tmp = BytesMut::new(bytes);
14649        #[allow(clippy::absurd_extreme_comparisons)]
14650        #[allow(unused_comparisons)]
14651        if __tmp.remaining() < Self::ENCODED_LEN {
14652            panic!(
14653                "buffer is too small (need {} bytes, but got {})",
14654                Self::ENCODED_LEN,
14655                __tmp.remaining(),
14656            )
14657        }
14658        __tmp.put_u32_le(self.custom_mode);
14659        __tmp.put_i32_le(self.latitude);
14660        __tmp.put_i32_le(self.longitude);
14661        __tmp.put_i16_le(self.roll);
14662        __tmp.put_i16_le(self.pitch);
14663        __tmp.put_u16_le(self.heading);
14664        __tmp.put_i16_le(self.heading_sp);
14665        __tmp.put_i16_le(self.altitude_amsl);
14666        __tmp.put_i16_le(self.altitude_sp);
14667        __tmp.put_u16_le(self.wp_distance);
14668        __tmp.put_u8(self.base_mode.bits());
14669        __tmp.put_u8(self.landed_state as u8);
14670        __tmp.put_i8(self.throttle);
14671        __tmp.put_u8(self.airspeed);
14672        __tmp.put_u8(self.airspeed_sp);
14673        __tmp.put_u8(self.groundspeed);
14674        __tmp.put_i8(self.climb_rate);
14675        __tmp.put_u8(self.gps_nsat);
14676        __tmp.put_u8(self.gps_fix_type as u8);
14677        __tmp.put_u8(self.battery_remaining);
14678        __tmp.put_i8(self.temperature);
14679        __tmp.put_i8(self.temperature_air);
14680        __tmp.put_u8(self.failsafe);
14681        __tmp.put_u8(self.wp_num);
14682        if matches!(version, MavlinkVersion::V2) {
14683            let len = __tmp.len();
14684            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
14685        } else {
14686            __tmp.len()
14687        }
14688    }
14689}
14690#[doc = "id: 235"]
14691#[doc = "Message appropriate for high latency connections like Iridium (version 2)."]
14692#[derive(Debug, Clone, PartialEq)]
14693#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
14694#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14695pub struct HIGH_LATENCY2_DATA {
14696    #[doc = "Timestamp (milliseconds since boot or Unix epoch)"]
14697    pub timestamp: u32,
14698    #[doc = "Latitude"]
14699    pub latitude: i32,
14700    #[doc = "Longitude"]
14701    pub longitude: i32,
14702    #[doc = "A bitfield for use for autopilot-specific flags (2 byte version)."]
14703    pub custom_mode: u16,
14704    #[doc = "Altitude above mean sea level"]
14705    pub altitude: i16,
14706    #[doc = "Altitude setpoint"]
14707    pub target_altitude: i16,
14708    #[doc = "Distance to target waypoint or position"]
14709    pub target_distance: u16,
14710    #[doc = "Current waypoint number"]
14711    pub wp_num: u16,
14712    #[doc = "Bitmap of failure flags."]
14713    pub failure_flags: HlFailureFlag,
14714    #[doc = "Type of the MAV (quadrotor, helicopter, etc.)"]
14715    pub mavtype: MavType,
14716    #[doc = "Autopilot type / class. Use MAV_AUTOPILOT_INVALID for components that are not flight controllers."]
14717    pub autopilot: MavAutopilot,
14718    #[doc = "Heading"]
14719    pub heading: u8,
14720    #[doc = "Heading setpoint"]
14721    pub target_heading: u8,
14722    #[doc = "Throttle"]
14723    pub throttle: u8,
14724    #[doc = "Airspeed"]
14725    pub airspeed: u8,
14726    #[doc = "Airspeed setpoint"]
14727    pub airspeed_sp: u8,
14728    #[doc = "Groundspeed"]
14729    pub groundspeed: u8,
14730    #[doc = "Windspeed"]
14731    pub windspeed: u8,
14732    #[doc = "Wind heading"]
14733    pub wind_heading: u8,
14734    #[doc = "Maximum error horizontal position since last message"]
14735    pub eph: u8,
14736    #[doc = "Maximum error vertical position since last message"]
14737    pub epv: u8,
14738    #[doc = "Air temperature"]
14739    pub temperature_air: i8,
14740    #[doc = "Maximum climb rate magnitude since last message"]
14741    pub climb_rate: i8,
14742    #[doc = "Battery level (-1 if field not provided)."]
14743    pub battery: i8,
14744    #[doc = "Field for custom payload."]
14745    pub custom0: i8,
14746    #[doc = "Field for custom payload."]
14747    pub custom1: i8,
14748    #[doc = "Field for custom payload."]
14749    pub custom2: i8,
14750}
14751impl HIGH_LATENCY2_DATA {
14752    pub const ENCODED_LEN: usize = 42usize;
14753    pub const DEFAULT: Self = Self {
14754        timestamp: 0_u32,
14755        latitude: 0_i32,
14756        longitude: 0_i32,
14757        custom_mode: 0_u16,
14758        altitude: 0_i16,
14759        target_altitude: 0_i16,
14760        target_distance: 0_u16,
14761        wp_num: 0_u16,
14762        failure_flags: HlFailureFlag::DEFAULT,
14763        mavtype: MavType::DEFAULT,
14764        autopilot: MavAutopilot::DEFAULT,
14765        heading: 0_u8,
14766        target_heading: 0_u8,
14767        throttle: 0_u8,
14768        airspeed: 0_u8,
14769        airspeed_sp: 0_u8,
14770        groundspeed: 0_u8,
14771        windspeed: 0_u8,
14772        wind_heading: 0_u8,
14773        eph: 0_u8,
14774        epv: 0_u8,
14775        temperature_air: 0_i8,
14776        climb_rate: 0_i8,
14777        battery: 0_i8,
14778        custom0: 0_i8,
14779        custom1: 0_i8,
14780        custom2: 0_i8,
14781    };
14782    #[cfg(feature = "arbitrary")]
14783    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
14784        use arbitrary::{Arbitrary, Unstructured};
14785        let mut buf = [0u8; 1024];
14786        rng.fill_bytes(&mut buf);
14787        let mut unstructured = Unstructured::new(&buf);
14788        Self::arbitrary(&mut unstructured).unwrap_or_default()
14789    }
14790}
14791impl Default for HIGH_LATENCY2_DATA {
14792    fn default() -> Self {
14793        Self::DEFAULT.clone()
14794    }
14795}
14796impl MessageData for HIGH_LATENCY2_DATA {
14797    type Message = MavMessage;
14798    const ID: u32 = 235u32;
14799    const NAME: &'static str = "HIGH_LATENCY2";
14800    const EXTRA_CRC: u8 = 179u8;
14801    const ENCODED_LEN: usize = 42usize;
14802    fn deser(
14803        _version: MavlinkVersion,
14804        __input: &[u8],
14805    ) -> Result<Self, ::mavlink_core::error::ParserError> {
14806        let avail_len = __input.len();
14807        let mut payload_buf = [0; Self::ENCODED_LEN];
14808        let mut buf = if avail_len < Self::ENCODED_LEN {
14809            payload_buf[0..avail_len].copy_from_slice(__input);
14810            Bytes::new(&payload_buf)
14811        } else {
14812            Bytes::new(__input)
14813        };
14814        let mut __struct = Self::default();
14815        __struct.timestamp = buf.get_u32_le();
14816        __struct.latitude = buf.get_i32_le();
14817        __struct.longitude = buf.get_i32_le();
14818        __struct.custom_mode = buf.get_u16_le();
14819        __struct.altitude = buf.get_i16_le();
14820        __struct.target_altitude = buf.get_i16_le();
14821        __struct.target_distance = buf.get_u16_le();
14822        __struct.wp_num = buf.get_u16_le();
14823        let tmp = buf.get_u16_le();
14824        __struct.failure_flags = HlFailureFlag::from_bits(tmp & HlFailureFlag::all().bits())
14825            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
14826                flag_type: "HlFailureFlag",
14827                value: tmp as u32,
14828            })?;
14829        let tmp = buf.get_u8();
14830        __struct.mavtype =
14831            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
14832                enum_type: "MavType",
14833                value: tmp as u32,
14834            })?;
14835        let tmp = buf.get_u8();
14836        __struct.autopilot =
14837            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
14838                enum_type: "MavAutopilot",
14839                value: tmp as u32,
14840            })?;
14841        __struct.heading = buf.get_u8();
14842        __struct.target_heading = buf.get_u8();
14843        __struct.throttle = buf.get_u8();
14844        __struct.airspeed = buf.get_u8();
14845        __struct.airspeed_sp = buf.get_u8();
14846        __struct.groundspeed = buf.get_u8();
14847        __struct.windspeed = buf.get_u8();
14848        __struct.wind_heading = buf.get_u8();
14849        __struct.eph = buf.get_u8();
14850        __struct.epv = buf.get_u8();
14851        __struct.temperature_air = buf.get_i8();
14852        __struct.climb_rate = buf.get_i8();
14853        __struct.battery = buf.get_i8();
14854        __struct.custom0 = buf.get_i8();
14855        __struct.custom1 = buf.get_i8();
14856        __struct.custom2 = buf.get_i8();
14857        Ok(__struct)
14858    }
14859    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
14860        let mut __tmp = BytesMut::new(bytes);
14861        #[allow(clippy::absurd_extreme_comparisons)]
14862        #[allow(unused_comparisons)]
14863        if __tmp.remaining() < Self::ENCODED_LEN {
14864            panic!(
14865                "buffer is too small (need {} bytes, but got {})",
14866                Self::ENCODED_LEN,
14867                __tmp.remaining(),
14868            )
14869        }
14870        __tmp.put_u32_le(self.timestamp);
14871        __tmp.put_i32_le(self.latitude);
14872        __tmp.put_i32_le(self.longitude);
14873        __tmp.put_u16_le(self.custom_mode);
14874        __tmp.put_i16_le(self.altitude);
14875        __tmp.put_i16_le(self.target_altitude);
14876        __tmp.put_u16_le(self.target_distance);
14877        __tmp.put_u16_le(self.wp_num);
14878        __tmp.put_u16_le(self.failure_flags.bits());
14879        __tmp.put_u8(self.mavtype as u8);
14880        __tmp.put_u8(self.autopilot as u8);
14881        __tmp.put_u8(self.heading);
14882        __tmp.put_u8(self.target_heading);
14883        __tmp.put_u8(self.throttle);
14884        __tmp.put_u8(self.airspeed);
14885        __tmp.put_u8(self.airspeed_sp);
14886        __tmp.put_u8(self.groundspeed);
14887        __tmp.put_u8(self.windspeed);
14888        __tmp.put_u8(self.wind_heading);
14889        __tmp.put_u8(self.eph);
14890        __tmp.put_u8(self.epv);
14891        __tmp.put_i8(self.temperature_air);
14892        __tmp.put_i8(self.climb_rate);
14893        __tmp.put_i8(self.battery);
14894        __tmp.put_i8(self.custom0);
14895        __tmp.put_i8(self.custom1);
14896        __tmp.put_i8(self.custom2);
14897        if matches!(version, MavlinkVersion::V2) {
14898            let len = __tmp.len();
14899            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
14900        } else {
14901            __tmp.len()
14902        }
14903    }
14904}
14905#[doc = "id: 93"]
14906#[doc = "Sent from autopilot to simulation. Hardware in the loop control outputs. Alternative to HIL_CONTROLS."]
14907#[derive(Debug, Clone, PartialEq)]
14908#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
14909#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14910pub struct HIL_ACTUATOR_CONTROLS_DATA {
14911    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
14912    pub time_usec: u64,
14913    #[doc = "Flags bitmask."]
14914    pub flags: HilActuatorControlsFlags,
14915    #[doc = "Control outputs -1 .. 1. Channel assignment depends on the simulated hardware."]
14916    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
14917    pub controls: [f32; 16],
14918    #[doc = "System mode. Includes arming state."]
14919    pub mode: MavModeFlag,
14920}
14921impl HIL_ACTUATOR_CONTROLS_DATA {
14922    pub const ENCODED_LEN: usize = 81usize;
14923    pub const DEFAULT: Self = Self {
14924        time_usec: 0_u64,
14925        flags: HilActuatorControlsFlags::DEFAULT,
14926        controls: [0.0_f32; 16usize],
14927        mode: MavModeFlag::DEFAULT,
14928    };
14929    #[cfg(feature = "arbitrary")]
14930    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
14931        use arbitrary::{Arbitrary, Unstructured};
14932        let mut buf = [0u8; 1024];
14933        rng.fill_bytes(&mut buf);
14934        let mut unstructured = Unstructured::new(&buf);
14935        Self::arbitrary(&mut unstructured).unwrap_or_default()
14936    }
14937}
14938impl Default for HIL_ACTUATOR_CONTROLS_DATA {
14939    fn default() -> Self {
14940        Self::DEFAULT.clone()
14941    }
14942}
14943impl MessageData for HIL_ACTUATOR_CONTROLS_DATA {
14944    type Message = MavMessage;
14945    const ID: u32 = 93u32;
14946    const NAME: &'static str = "HIL_ACTUATOR_CONTROLS";
14947    const EXTRA_CRC: u8 = 47u8;
14948    const ENCODED_LEN: usize = 81usize;
14949    fn deser(
14950        _version: MavlinkVersion,
14951        __input: &[u8],
14952    ) -> Result<Self, ::mavlink_core::error::ParserError> {
14953        let avail_len = __input.len();
14954        let mut payload_buf = [0; Self::ENCODED_LEN];
14955        let mut buf = if avail_len < Self::ENCODED_LEN {
14956            payload_buf[0..avail_len].copy_from_slice(__input);
14957            Bytes::new(&payload_buf)
14958        } else {
14959            Bytes::new(__input)
14960        };
14961        let mut __struct = Self::default();
14962        __struct.time_usec = buf.get_u64_le();
14963        let tmp = buf.get_u64_le();
14964        __struct.flags =
14965            HilActuatorControlsFlags::from_bits(tmp & HilActuatorControlsFlags::all().bits())
14966                .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
14967                    flag_type: "HilActuatorControlsFlags",
14968                    value: tmp as u32,
14969                })?;
14970        for v in &mut __struct.controls {
14971            let val = buf.get_f32_le();
14972            *v = val;
14973        }
14974        let tmp = buf.get_u8();
14975        __struct.mode = MavModeFlag::from_bits(tmp & MavModeFlag::all().bits()).ok_or(
14976            ::mavlink_core::error::ParserError::InvalidFlag {
14977                flag_type: "MavModeFlag",
14978                value: tmp as u32,
14979            },
14980        )?;
14981        Ok(__struct)
14982    }
14983    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
14984        let mut __tmp = BytesMut::new(bytes);
14985        #[allow(clippy::absurd_extreme_comparisons)]
14986        #[allow(unused_comparisons)]
14987        if __tmp.remaining() < Self::ENCODED_LEN {
14988            panic!(
14989                "buffer is too small (need {} bytes, but got {})",
14990                Self::ENCODED_LEN,
14991                __tmp.remaining(),
14992            )
14993        }
14994        __tmp.put_u64_le(self.time_usec);
14995        __tmp.put_u64_le(self.flags.bits());
14996        for val in &self.controls {
14997            __tmp.put_f32_le(*val);
14998        }
14999        __tmp.put_u8(self.mode.bits());
15000        if matches!(version, MavlinkVersion::V2) {
15001            let len = __tmp.len();
15002            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
15003        } else {
15004            __tmp.len()
15005        }
15006    }
15007}
15008#[doc = "id: 91"]
15009#[doc = "Sent from autopilot to simulation. Hardware in the loop control outputs. Alternative to HIL_ACTUATOR_CONTROLS."]
15010#[derive(Debug, Clone, PartialEq)]
15011#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15012#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15013pub struct HIL_CONTROLS_DATA {
15014    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
15015    pub time_usec: u64,
15016    #[doc = "Control output -1 .. 1"]
15017    pub roll_ailerons: f32,
15018    #[doc = "Control output -1 .. 1"]
15019    pub pitch_elevator: f32,
15020    #[doc = "Control output -1 .. 1"]
15021    pub yaw_rudder: f32,
15022    #[doc = "Throttle 0 .. 1"]
15023    pub throttle: f32,
15024    #[doc = "Aux 1, -1 .. 1"]
15025    pub aux1: f32,
15026    #[doc = "Aux 2, -1 .. 1"]
15027    pub aux2: f32,
15028    #[doc = "Aux 3, -1 .. 1"]
15029    pub aux3: f32,
15030    #[doc = "Aux 4, -1 .. 1"]
15031    pub aux4: f32,
15032    #[doc = "System mode."]
15033    pub mode: MavMode,
15034    #[doc = "Navigation mode (MAV_NAV_MODE)"]
15035    pub nav_mode: u8,
15036}
15037impl HIL_CONTROLS_DATA {
15038    pub const ENCODED_LEN: usize = 42usize;
15039    pub const DEFAULT: Self = Self {
15040        time_usec: 0_u64,
15041        roll_ailerons: 0.0_f32,
15042        pitch_elevator: 0.0_f32,
15043        yaw_rudder: 0.0_f32,
15044        throttle: 0.0_f32,
15045        aux1: 0.0_f32,
15046        aux2: 0.0_f32,
15047        aux3: 0.0_f32,
15048        aux4: 0.0_f32,
15049        mode: MavMode::DEFAULT,
15050        nav_mode: 0_u8,
15051    };
15052    #[cfg(feature = "arbitrary")]
15053    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
15054        use arbitrary::{Arbitrary, Unstructured};
15055        let mut buf = [0u8; 1024];
15056        rng.fill_bytes(&mut buf);
15057        let mut unstructured = Unstructured::new(&buf);
15058        Self::arbitrary(&mut unstructured).unwrap_or_default()
15059    }
15060}
15061impl Default for HIL_CONTROLS_DATA {
15062    fn default() -> Self {
15063        Self::DEFAULT.clone()
15064    }
15065}
15066impl MessageData for HIL_CONTROLS_DATA {
15067    type Message = MavMessage;
15068    const ID: u32 = 91u32;
15069    const NAME: &'static str = "HIL_CONTROLS";
15070    const EXTRA_CRC: u8 = 63u8;
15071    const ENCODED_LEN: usize = 42usize;
15072    fn deser(
15073        _version: MavlinkVersion,
15074        __input: &[u8],
15075    ) -> Result<Self, ::mavlink_core::error::ParserError> {
15076        let avail_len = __input.len();
15077        let mut payload_buf = [0; Self::ENCODED_LEN];
15078        let mut buf = if avail_len < Self::ENCODED_LEN {
15079            payload_buf[0..avail_len].copy_from_slice(__input);
15080            Bytes::new(&payload_buf)
15081        } else {
15082            Bytes::new(__input)
15083        };
15084        let mut __struct = Self::default();
15085        __struct.time_usec = buf.get_u64_le();
15086        __struct.roll_ailerons = buf.get_f32_le();
15087        __struct.pitch_elevator = buf.get_f32_le();
15088        __struct.yaw_rudder = buf.get_f32_le();
15089        __struct.throttle = buf.get_f32_le();
15090        __struct.aux1 = buf.get_f32_le();
15091        __struct.aux2 = buf.get_f32_le();
15092        __struct.aux3 = buf.get_f32_le();
15093        __struct.aux4 = buf.get_f32_le();
15094        let tmp = buf.get_u8();
15095        __struct.mode =
15096            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
15097                enum_type: "MavMode",
15098                value: tmp as u32,
15099            })?;
15100        __struct.nav_mode = buf.get_u8();
15101        Ok(__struct)
15102    }
15103    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
15104        let mut __tmp = BytesMut::new(bytes);
15105        #[allow(clippy::absurd_extreme_comparisons)]
15106        #[allow(unused_comparisons)]
15107        if __tmp.remaining() < Self::ENCODED_LEN {
15108            panic!(
15109                "buffer is too small (need {} bytes, but got {})",
15110                Self::ENCODED_LEN,
15111                __tmp.remaining(),
15112            )
15113        }
15114        __tmp.put_u64_le(self.time_usec);
15115        __tmp.put_f32_le(self.roll_ailerons);
15116        __tmp.put_f32_le(self.pitch_elevator);
15117        __tmp.put_f32_le(self.yaw_rudder);
15118        __tmp.put_f32_le(self.throttle);
15119        __tmp.put_f32_le(self.aux1);
15120        __tmp.put_f32_le(self.aux2);
15121        __tmp.put_f32_le(self.aux3);
15122        __tmp.put_f32_le(self.aux4);
15123        __tmp.put_u8(self.mode as u8);
15124        __tmp.put_u8(self.nav_mode);
15125        if matches!(version, MavlinkVersion::V2) {
15126            let len = __tmp.len();
15127            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
15128        } else {
15129            __tmp.len()
15130        }
15131    }
15132}
15133#[doc = "id: 113"]
15134#[doc = "The global position, as returned by the Global Positioning System (GPS). This is                  NOT the global position estimate of the system, but rather a RAW sensor value. See message GLOBAL_POSITION_INT for the global position estimate."]
15135#[derive(Debug, Clone, PartialEq)]
15136#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15137#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15138pub struct HIL_GPS_DATA {
15139    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
15140    pub time_usec: u64,
15141    #[doc = "Latitude (WGS84)"]
15142    pub lat: i32,
15143    #[doc = "Longitude (WGS84)"]
15144    pub lon: i32,
15145    #[doc = "Altitude (MSL). Positive for up."]
15146    pub alt: i32,
15147    #[doc = "GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX"]
15148    pub eph: u16,
15149    #[doc = "GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX"]
15150    pub epv: u16,
15151    #[doc = "GPS ground speed. If unknown, set to: UINT16_MAX"]
15152    pub vel: u16,
15153    #[doc = "GPS velocity in north direction in earth-fixed NED frame"]
15154    pub vn: i16,
15155    #[doc = "GPS velocity in east direction in earth-fixed NED frame"]
15156    pub ve: i16,
15157    #[doc = "GPS velocity in down direction in earth-fixed NED frame"]
15158    pub vd: i16,
15159    #[doc = "Course over ground (NOT heading, but direction of movement), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX"]
15160    pub cog: u16,
15161    #[doc = "0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix."]
15162    pub fix_type: u8,
15163    #[doc = "Number of satellites visible. If unknown, set to UINT8_MAX"]
15164    pub satellites_visible: u8,
15165    #[doc = "GPS ID (zero indexed). Used for multiple GPS inputs"]
15166    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
15167    pub id: u8,
15168    #[doc = "Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north"]
15169    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
15170    pub yaw: u16,
15171}
15172impl HIL_GPS_DATA {
15173    pub const ENCODED_LEN: usize = 39usize;
15174    pub const DEFAULT: Self = Self {
15175        time_usec: 0_u64,
15176        lat: 0_i32,
15177        lon: 0_i32,
15178        alt: 0_i32,
15179        eph: 0_u16,
15180        epv: 0_u16,
15181        vel: 0_u16,
15182        vn: 0_i16,
15183        ve: 0_i16,
15184        vd: 0_i16,
15185        cog: 0_u16,
15186        fix_type: 0_u8,
15187        satellites_visible: 0_u8,
15188        id: 0_u8,
15189        yaw: 0_u16,
15190    };
15191    #[cfg(feature = "arbitrary")]
15192    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
15193        use arbitrary::{Arbitrary, Unstructured};
15194        let mut buf = [0u8; 1024];
15195        rng.fill_bytes(&mut buf);
15196        let mut unstructured = Unstructured::new(&buf);
15197        Self::arbitrary(&mut unstructured).unwrap_or_default()
15198    }
15199}
15200impl Default for HIL_GPS_DATA {
15201    fn default() -> Self {
15202        Self::DEFAULT.clone()
15203    }
15204}
15205impl MessageData for HIL_GPS_DATA {
15206    type Message = MavMessage;
15207    const ID: u32 = 113u32;
15208    const NAME: &'static str = "HIL_GPS";
15209    const EXTRA_CRC: u8 = 124u8;
15210    const ENCODED_LEN: usize = 39usize;
15211    fn deser(
15212        _version: MavlinkVersion,
15213        __input: &[u8],
15214    ) -> Result<Self, ::mavlink_core::error::ParserError> {
15215        let avail_len = __input.len();
15216        let mut payload_buf = [0; Self::ENCODED_LEN];
15217        let mut buf = if avail_len < Self::ENCODED_LEN {
15218            payload_buf[0..avail_len].copy_from_slice(__input);
15219            Bytes::new(&payload_buf)
15220        } else {
15221            Bytes::new(__input)
15222        };
15223        let mut __struct = Self::default();
15224        __struct.time_usec = buf.get_u64_le();
15225        __struct.lat = buf.get_i32_le();
15226        __struct.lon = buf.get_i32_le();
15227        __struct.alt = buf.get_i32_le();
15228        __struct.eph = buf.get_u16_le();
15229        __struct.epv = buf.get_u16_le();
15230        __struct.vel = buf.get_u16_le();
15231        __struct.vn = buf.get_i16_le();
15232        __struct.ve = buf.get_i16_le();
15233        __struct.vd = buf.get_i16_le();
15234        __struct.cog = buf.get_u16_le();
15235        __struct.fix_type = buf.get_u8();
15236        __struct.satellites_visible = buf.get_u8();
15237        __struct.id = buf.get_u8();
15238        __struct.yaw = buf.get_u16_le();
15239        Ok(__struct)
15240    }
15241    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
15242        let mut __tmp = BytesMut::new(bytes);
15243        #[allow(clippy::absurd_extreme_comparisons)]
15244        #[allow(unused_comparisons)]
15245        if __tmp.remaining() < Self::ENCODED_LEN {
15246            panic!(
15247                "buffer is too small (need {} bytes, but got {})",
15248                Self::ENCODED_LEN,
15249                __tmp.remaining(),
15250            )
15251        }
15252        __tmp.put_u64_le(self.time_usec);
15253        __tmp.put_i32_le(self.lat);
15254        __tmp.put_i32_le(self.lon);
15255        __tmp.put_i32_le(self.alt);
15256        __tmp.put_u16_le(self.eph);
15257        __tmp.put_u16_le(self.epv);
15258        __tmp.put_u16_le(self.vel);
15259        __tmp.put_i16_le(self.vn);
15260        __tmp.put_i16_le(self.ve);
15261        __tmp.put_i16_le(self.vd);
15262        __tmp.put_u16_le(self.cog);
15263        __tmp.put_u8(self.fix_type);
15264        __tmp.put_u8(self.satellites_visible);
15265        __tmp.put_u8(self.id);
15266        __tmp.put_u16_le(self.yaw);
15267        if matches!(version, MavlinkVersion::V2) {
15268            let len = __tmp.len();
15269            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
15270        } else {
15271            __tmp.len()
15272        }
15273    }
15274}
15275#[doc = "id: 114"]
15276#[doc = "Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical mouse sensor)."]
15277#[derive(Debug, Clone, PartialEq)]
15278#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15279#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15280pub struct HIL_OPTICAL_FLOW_DATA {
15281    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
15282    pub time_usec: u64,
15283    #[doc = "Integration time. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the."]
15284    pub integration_time_us: u32,
15285    #[doc = "Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)"]
15286    pub integrated_x: f32,
15287    #[doc = "Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)"]
15288    pub integrated_y: f32,
15289    #[doc = "RH rotation around X axis"]
15290    pub integrated_xgyro: f32,
15291    #[doc = "RH rotation around Y axis"]
15292    pub integrated_ygyro: f32,
15293    #[doc = "RH rotation around Z axis"]
15294    pub integrated_zgyro: f32,
15295    #[doc = "Time since the distance was sampled."]
15296    pub time_delta_distance_us: u32,
15297    #[doc = "Distance to the center of the flow field. Positive value (including zero): distance known. Negative value: Unknown distance."]
15298    pub distance: f32,
15299    #[doc = "Temperature"]
15300    pub temperature: i16,
15301    #[doc = "Sensor ID"]
15302    pub sensor_id: u8,
15303    #[doc = "Optical flow quality / confidence. 0: no valid flow, 255: maximum quality"]
15304    pub quality: u8,
15305}
15306impl HIL_OPTICAL_FLOW_DATA {
15307    pub const ENCODED_LEN: usize = 44usize;
15308    pub const DEFAULT: Self = Self {
15309        time_usec: 0_u64,
15310        integration_time_us: 0_u32,
15311        integrated_x: 0.0_f32,
15312        integrated_y: 0.0_f32,
15313        integrated_xgyro: 0.0_f32,
15314        integrated_ygyro: 0.0_f32,
15315        integrated_zgyro: 0.0_f32,
15316        time_delta_distance_us: 0_u32,
15317        distance: 0.0_f32,
15318        temperature: 0_i16,
15319        sensor_id: 0_u8,
15320        quality: 0_u8,
15321    };
15322    #[cfg(feature = "arbitrary")]
15323    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
15324        use arbitrary::{Arbitrary, Unstructured};
15325        let mut buf = [0u8; 1024];
15326        rng.fill_bytes(&mut buf);
15327        let mut unstructured = Unstructured::new(&buf);
15328        Self::arbitrary(&mut unstructured).unwrap_or_default()
15329    }
15330}
15331impl Default for HIL_OPTICAL_FLOW_DATA {
15332    fn default() -> Self {
15333        Self::DEFAULT.clone()
15334    }
15335}
15336impl MessageData for HIL_OPTICAL_FLOW_DATA {
15337    type Message = MavMessage;
15338    const ID: u32 = 114u32;
15339    const NAME: &'static str = "HIL_OPTICAL_FLOW";
15340    const EXTRA_CRC: u8 = 237u8;
15341    const ENCODED_LEN: usize = 44usize;
15342    fn deser(
15343        _version: MavlinkVersion,
15344        __input: &[u8],
15345    ) -> Result<Self, ::mavlink_core::error::ParserError> {
15346        let avail_len = __input.len();
15347        let mut payload_buf = [0; Self::ENCODED_LEN];
15348        let mut buf = if avail_len < Self::ENCODED_LEN {
15349            payload_buf[0..avail_len].copy_from_slice(__input);
15350            Bytes::new(&payload_buf)
15351        } else {
15352            Bytes::new(__input)
15353        };
15354        let mut __struct = Self::default();
15355        __struct.time_usec = buf.get_u64_le();
15356        __struct.integration_time_us = buf.get_u32_le();
15357        __struct.integrated_x = buf.get_f32_le();
15358        __struct.integrated_y = buf.get_f32_le();
15359        __struct.integrated_xgyro = buf.get_f32_le();
15360        __struct.integrated_ygyro = buf.get_f32_le();
15361        __struct.integrated_zgyro = buf.get_f32_le();
15362        __struct.time_delta_distance_us = buf.get_u32_le();
15363        __struct.distance = buf.get_f32_le();
15364        __struct.temperature = buf.get_i16_le();
15365        __struct.sensor_id = buf.get_u8();
15366        __struct.quality = buf.get_u8();
15367        Ok(__struct)
15368    }
15369    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
15370        let mut __tmp = BytesMut::new(bytes);
15371        #[allow(clippy::absurd_extreme_comparisons)]
15372        #[allow(unused_comparisons)]
15373        if __tmp.remaining() < Self::ENCODED_LEN {
15374            panic!(
15375                "buffer is too small (need {} bytes, but got {})",
15376                Self::ENCODED_LEN,
15377                __tmp.remaining(),
15378            )
15379        }
15380        __tmp.put_u64_le(self.time_usec);
15381        __tmp.put_u32_le(self.integration_time_us);
15382        __tmp.put_f32_le(self.integrated_x);
15383        __tmp.put_f32_le(self.integrated_y);
15384        __tmp.put_f32_le(self.integrated_xgyro);
15385        __tmp.put_f32_le(self.integrated_ygyro);
15386        __tmp.put_f32_le(self.integrated_zgyro);
15387        __tmp.put_u32_le(self.time_delta_distance_us);
15388        __tmp.put_f32_le(self.distance);
15389        __tmp.put_i16_le(self.temperature);
15390        __tmp.put_u8(self.sensor_id);
15391        __tmp.put_u8(self.quality);
15392        if matches!(version, MavlinkVersion::V2) {
15393            let len = __tmp.len();
15394            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
15395        } else {
15396            __tmp.len()
15397        }
15398    }
15399}
15400#[doc = "id: 92"]
15401#[doc = "Sent from simulation to autopilot. The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification."]
15402#[derive(Debug, Clone, PartialEq)]
15403#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15404#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15405pub struct HIL_RC_INPUTS_RAW_DATA {
15406    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
15407    pub time_usec: u64,
15408    #[doc = "RC channel 1 value"]
15409    pub chan1_raw: u16,
15410    #[doc = "RC channel 2 value"]
15411    pub chan2_raw: u16,
15412    #[doc = "RC channel 3 value"]
15413    pub chan3_raw: u16,
15414    #[doc = "RC channel 4 value"]
15415    pub chan4_raw: u16,
15416    #[doc = "RC channel 5 value"]
15417    pub chan5_raw: u16,
15418    #[doc = "RC channel 6 value"]
15419    pub chan6_raw: u16,
15420    #[doc = "RC channel 7 value"]
15421    pub chan7_raw: u16,
15422    #[doc = "RC channel 8 value"]
15423    pub chan8_raw: u16,
15424    #[doc = "RC channel 9 value"]
15425    pub chan9_raw: u16,
15426    #[doc = "RC channel 10 value"]
15427    pub chan10_raw: u16,
15428    #[doc = "RC channel 11 value"]
15429    pub chan11_raw: u16,
15430    #[doc = "RC channel 12 value"]
15431    pub chan12_raw: u16,
15432    #[doc = "Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown."]
15433    pub rssi: u8,
15434}
15435impl HIL_RC_INPUTS_RAW_DATA {
15436    pub const ENCODED_LEN: usize = 33usize;
15437    pub const DEFAULT: Self = Self {
15438        time_usec: 0_u64,
15439        chan1_raw: 0_u16,
15440        chan2_raw: 0_u16,
15441        chan3_raw: 0_u16,
15442        chan4_raw: 0_u16,
15443        chan5_raw: 0_u16,
15444        chan6_raw: 0_u16,
15445        chan7_raw: 0_u16,
15446        chan8_raw: 0_u16,
15447        chan9_raw: 0_u16,
15448        chan10_raw: 0_u16,
15449        chan11_raw: 0_u16,
15450        chan12_raw: 0_u16,
15451        rssi: 0_u8,
15452    };
15453    #[cfg(feature = "arbitrary")]
15454    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
15455        use arbitrary::{Arbitrary, Unstructured};
15456        let mut buf = [0u8; 1024];
15457        rng.fill_bytes(&mut buf);
15458        let mut unstructured = Unstructured::new(&buf);
15459        Self::arbitrary(&mut unstructured).unwrap_or_default()
15460    }
15461}
15462impl Default for HIL_RC_INPUTS_RAW_DATA {
15463    fn default() -> Self {
15464        Self::DEFAULT.clone()
15465    }
15466}
15467impl MessageData for HIL_RC_INPUTS_RAW_DATA {
15468    type Message = MavMessage;
15469    const ID: u32 = 92u32;
15470    const NAME: &'static str = "HIL_RC_INPUTS_RAW";
15471    const EXTRA_CRC: u8 = 54u8;
15472    const ENCODED_LEN: usize = 33usize;
15473    fn deser(
15474        _version: MavlinkVersion,
15475        __input: &[u8],
15476    ) -> Result<Self, ::mavlink_core::error::ParserError> {
15477        let avail_len = __input.len();
15478        let mut payload_buf = [0; Self::ENCODED_LEN];
15479        let mut buf = if avail_len < Self::ENCODED_LEN {
15480            payload_buf[0..avail_len].copy_from_slice(__input);
15481            Bytes::new(&payload_buf)
15482        } else {
15483            Bytes::new(__input)
15484        };
15485        let mut __struct = Self::default();
15486        __struct.time_usec = buf.get_u64_le();
15487        __struct.chan1_raw = buf.get_u16_le();
15488        __struct.chan2_raw = buf.get_u16_le();
15489        __struct.chan3_raw = buf.get_u16_le();
15490        __struct.chan4_raw = buf.get_u16_le();
15491        __struct.chan5_raw = buf.get_u16_le();
15492        __struct.chan6_raw = buf.get_u16_le();
15493        __struct.chan7_raw = buf.get_u16_le();
15494        __struct.chan8_raw = buf.get_u16_le();
15495        __struct.chan9_raw = buf.get_u16_le();
15496        __struct.chan10_raw = buf.get_u16_le();
15497        __struct.chan11_raw = buf.get_u16_le();
15498        __struct.chan12_raw = buf.get_u16_le();
15499        __struct.rssi = buf.get_u8();
15500        Ok(__struct)
15501    }
15502    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
15503        let mut __tmp = BytesMut::new(bytes);
15504        #[allow(clippy::absurd_extreme_comparisons)]
15505        #[allow(unused_comparisons)]
15506        if __tmp.remaining() < Self::ENCODED_LEN {
15507            panic!(
15508                "buffer is too small (need {} bytes, but got {})",
15509                Self::ENCODED_LEN,
15510                __tmp.remaining(),
15511            )
15512        }
15513        __tmp.put_u64_le(self.time_usec);
15514        __tmp.put_u16_le(self.chan1_raw);
15515        __tmp.put_u16_le(self.chan2_raw);
15516        __tmp.put_u16_le(self.chan3_raw);
15517        __tmp.put_u16_le(self.chan4_raw);
15518        __tmp.put_u16_le(self.chan5_raw);
15519        __tmp.put_u16_le(self.chan6_raw);
15520        __tmp.put_u16_le(self.chan7_raw);
15521        __tmp.put_u16_le(self.chan8_raw);
15522        __tmp.put_u16_le(self.chan9_raw);
15523        __tmp.put_u16_le(self.chan10_raw);
15524        __tmp.put_u16_le(self.chan11_raw);
15525        __tmp.put_u16_le(self.chan12_raw);
15526        __tmp.put_u8(self.rssi);
15527        if matches!(version, MavlinkVersion::V2) {
15528            let len = __tmp.len();
15529            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
15530        } else {
15531            __tmp.len()
15532        }
15533    }
15534}
15535#[doc = "id: 107"]
15536#[doc = "The IMU readings in SI units in NED body frame."]
15537#[derive(Debug, Clone, PartialEq)]
15538#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15539#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15540pub struct HIL_SENSOR_DATA {
15541    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
15542    pub time_usec: u64,
15543    #[doc = "X acceleration"]
15544    pub xacc: f32,
15545    #[doc = "Y acceleration"]
15546    pub yacc: f32,
15547    #[doc = "Z acceleration"]
15548    pub zacc: f32,
15549    #[doc = "Angular speed around X axis in body frame"]
15550    pub xgyro: f32,
15551    #[doc = "Angular speed around Y axis in body frame"]
15552    pub ygyro: f32,
15553    #[doc = "Angular speed around Z axis in body frame"]
15554    pub zgyro: f32,
15555    #[doc = "X Magnetic field"]
15556    pub xmag: f32,
15557    #[doc = "Y Magnetic field"]
15558    pub ymag: f32,
15559    #[doc = "Z Magnetic field"]
15560    pub zmag: f32,
15561    #[doc = "Absolute pressure"]
15562    pub abs_pressure: f32,
15563    #[doc = "Differential pressure (airspeed)"]
15564    pub diff_pressure: f32,
15565    #[doc = "Altitude calculated from pressure"]
15566    pub pressure_alt: f32,
15567    #[doc = "Temperature"]
15568    pub temperature: f32,
15569    #[doc = "Bitmap for fields that have updated since last message"]
15570    pub fields_updated: HilSensorUpdatedFlags,
15571    #[doc = "Sensor ID (zero indexed). Used for multiple sensor inputs"]
15572    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
15573    pub id: u8,
15574}
15575impl HIL_SENSOR_DATA {
15576    pub const ENCODED_LEN: usize = 65usize;
15577    pub const DEFAULT: Self = Self {
15578        time_usec: 0_u64,
15579        xacc: 0.0_f32,
15580        yacc: 0.0_f32,
15581        zacc: 0.0_f32,
15582        xgyro: 0.0_f32,
15583        ygyro: 0.0_f32,
15584        zgyro: 0.0_f32,
15585        xmag: 0.0_f32,
15586        ymag: 0.0_f32,
15587        zmag: 0.0_f32,
15588        abs_pressure: 0.0_f32,
15589        diff_pressure: 0.0_f32,
15590        pressure_alt: 0.0_f32,
15591        temperature: 0.0_f32,
15592        fields_updated: HilSensorUpdatedFlags::DEFAULT,
15593        id: 0_u8,
15594    };
15595    #[cfg(feature = "arbitrary")]
15596    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
15597        use arbitrary::{Arbitrary, Unstructured};
15598        let mut buf = [0u8; 1024];
15599        rng.fill_bytes(&mut buf);
15600        let mut unstructured = Unstructured::new(&buf);
15601        Self::arbitrary(&mut unstructured).unwrap_or_default()
15602    }
15603}
15604impl Default for HIL_SENSOR_DATA {
15605    fn default() -> Self {
15606        Self::DEFAULT.clone()
15607    }
15608}
15609impl MessageData for HIL_SENSOR_DATA {
15610    type Message = MavMessage;
15611    const ID: u32 = 107u32;
15612    const NAME: &'static str = "HIL_SENSOR";
15613    const EXTRA_CRC: u8 = 108u8;
15614    const ENCODED_LEN: usize = 65usize;
15615    fn deser(
15616        _version: MavlinkVersion,
15617        __input: &[u8],
15618    ) -> Result<Self, ::mavlink_core::error::ParserError> {
15619        let avail_len = __input.len();
15620        let mut payload_buf = [0; Self::ENCODED_LEN];
15621        let mut buf = if avail_len < Self::ENCODED_LEN {
15622            payload_buf[0..avail_len].copy_from_slice(__input);
15623            Bytes::new(&payload_buf)
15624        } else {
15625            Bytes::new(__input)
15626        };
15627        let mut __struct = Self::default();
15628        __struct.time_usec = buf.get_u64_le();
15629        __struct.xacc = buf.get_f32_le();
15630        __struct.yacc = buf.get_f32_le();
15631        __struct.zacc = buf.get_f32_le();
15632        __struct.xgyro = buf.get_f32_le();
15633        __struct.ygyro = buf.get_f32_le();
15634        __struct.zgyro = buf.get_f32_le();
15635        __struct.xmag = buf.get_f32_le();
15636        __struct.ymag = buf.get_f32_le();
15637        __struct.zmag = buf.get_f32_le();
15638        __struct.abs_pressure = buf.get_f32_le();
15639        __struct.diff_pressure = buf.get_f32_le();
15640        __struct.pressure_alt = buf.get_f32_le();
15641        __struct.temperature = buf.get_f32_le();
15642        let tmp = buf.get_u32_le();
15643        __struct.fields_updated = HilSensorUpdatedFlags::from_bits(
15644            tmp & HilSensorUpdatedFlags::all().bits(),
15645        )
15646        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
15647            flag_type: "HilSensorUpdatedFlags",
15648            value: tmp as u32,
15649        })?;
15650        __struct.id = buf.get_u8();
15651        Ok(__struct)
15652    }
15653    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
15654        let mut __tmp = BytesMut::new(bytes);
15655        #[allow(clippy::absurd_extreme_comparisons)]
15656        #[allow(unused_comparisons)]
15657        if __tmp.remaining() < Self::ENCODED_LEN {
15658            panic!(
15659                "buffer is too small (need {} bytes, but got {})",
15660                Self::ENCODED_LEN,
15661                __tmp.remaining(),
15662            )
15663        }
15664        __tmp.put_u64_le(self.time_usec);
15665        __tmp.put_f32_le(self.xacc);
15666        __tmp.put_f32_le(self.yacc);
15667        __tmp.put_f32_le(self.zacc);
15668        __tmp.put_f32_le(self.xgyro);
15669        __tmp.put_f32_le(self.ygyro);
15670        __tmp.put_f32_le(self.zgyro);
15671        __tmp.put_f32_le(self.xmag);
15672        __tmp.put_f32_le(self.ymag);
15673        __tmp.put_f32_le(self.zmag);
15674        __tmp.put_f32_le(self.abs_pressure);
15675        __tmp.put_f32_le(self.diff_pressure);
15676        __tmp.put_f32_le(self.pressure_alt);
15677        __tmp.put_f32_le(self.temperature);
15678        __tmp.put_u32_le(self.fields_updated.bits());
15679        __tmp.put_u8(self.id);
15680        if matches!(version, MavlinkVersion::V2) {
15681            let len = __tmp.len();
15682            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
15683        } else {
15684            __tmp.len()
15685        }
15686    }
15687}
15688#[deprecated = "Suffers from missing airspeed fields and singularities due to Euler angles. See `HIL_STATE_QUATERNION` (Deprecated since 2013-07)"]
15689#[doc = "id: 90"]
15690#[doc = "Sent from simulation to autopilot. This packet is useful for high throughput applications such as hardware in the loop simulations."]
15691#[derive(Debug, Clone, PartialEq)]
15692#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15693#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15694pub struct HIL_STATE_DATA {
15695    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
15696    pub time_usec: u64,
15697    #[doc = "Roll angle"]
15698    pub roll: f32,
15699    #[doc = "Pitch angle"]
15700    pub pitch: f32,
15701    #[doc = "Yaw angle"]
15702    pub yaw: f32,
15703    #[doc = "Body frame roll / phi angular speed"]
15704    pub rollspeed: f32,
15705    #[doc = "Body frame pitch / theta angular speed"]
15706    pub pitchspeed: f32,
15707    #[doc = "Body frame yaw / psi angular speed"]
15708    pub yawspeed: f32,
15709    #[doc = "Latitude"]
15710    pub lat: i32,
15711    #[doc = "Longitude"]
15712    pub lon: i32,
15713    #[doc = "Altitude"]
15714    pub alt: i32,
15715    #[doc = "Ground X Speed (Latitude)"]
15716    pub vx: i16,
15717    #[doc = "Ground Y Speed (Longitude)"]
15718    pub vy: i16,
15719    #[doc = "Ground Z Speed (Altitude)"]
15720    pub vz: i16,
15721    #[doc = "X acceleration"]
15722    pub xacc: i16,
15723    #[doc = "Y acceleration"]
15724    pub yacc: i16,
15725    #[doc = "Z acceleration"]
15726    pub zacc: i16,
15727}
15728impl HIL_STATE_DATA {
15729    pub const ENCODED_LEN: usize = 56usize;
15730    pub const DEFAULT: Self = Self {
15731        time_usec: 0_u64,
15732        roll: 0.0_f32,
15733        pitch: 0.0_f32,
15734        yaw: 0.0_f32,
15735        rollspeed: 0.0_f32,
15736        pitchspeed: 0.0_f32,
15737        yawspeed: 0.0_f32,
15738        lat: 0_i32,
15739        lon: 0_i32,
15740        alt: 0_i32,
15741        vx: 0_i16,
15742        vy: 0_i16,
15743        vz: 0_i16,
15744        xacc: 0_i16,
15745        yacc: 0_i16,
15746        zacc: 0_i16,
15747    };
15748    #[cfg(feature = "arbitrary")]
15749    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
15750        use arbitrary::{Arbitrary, Unstructured};
15751        let mut buf = [0u8; 1024];
15752        rng.fill_bytes(&mut buf);
15753        let mut unstructured = Unstructured::new(&buf);
15754        Self::arbitrary(&mut unstructured).unwrap_or_default()
15755    }
15756}
15757impl Default for HIL_STATE_DATA {
15758    fn default() -> Self {
15759        Self::DEFAULT.clone()
15760    }
15761}
15762impl MessageData for HIL_STATE_DATA {
15763    type Message = MavMessage;
15764    const ID: u32 = 90u32;
15765    const NAME: &'static str = "HIL_STATE";
15766    const EXTRA_CRC: u8 = 183u8;
15767    const ENCODED_LEN: usize = 56usize;
15768    fn deser(
15769        _version: MavlinkVersion,
15770        __input: &[u8],
15771    ) -> Result<Self, ::mavlink_core::error::ParserError> {
15772        let avail_len = __input.len();
15773        let mut payload_buf = [0; Self::ENCODED_LEN];
15774        let mut buf = if avail_len < Self::ENCODED_LEN {
15775            payload_buf[0..avail_len].copy_from_slice(__input);
15776            Bytes::new(&payload_buf)
15777        } else {
15778            Bytes::new(__input)
15779        };
15780        let mut __struct = Self::default();
15781        __struct.time_usec = buf.get_u64_le();
15782        __struct.roll = buf.get_f32_le();
15783        __struct.pitch = buf.get_f32_le();
15784        __struct.yaw = buf.get_f32_le();
15785        __struct.rollspeed = buf.get_f32_le();
15786        __struct.pitchspeed = buf.get_f32_le();
15787        __struct.yawspeed = buf.get_f32_le();
15788        __struct.lat = buf.get_i32_le();
15789        __struct.lon = buf.get_i32_le();
15790        __struct.alt = buf.get_i32_le();
15791        __struct.vx = buf.get_i16_le();
15792        __struct.vy = buf.get_i16_le();
15793        __struct.vz = buf.get_i16_le();
15794        __struct.xacc = buf.get_i16_le();
15795        __struct.yacc = buf.get_i16_le();
15796        __struct.zacc = buf.get_i16_le();
15797        Ok(__struct)
15798    }
15799    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
15800        let mut __tmp = BytesMut::new(bytes);
15801        #[allow(clippy::absurd_extreme_comparisons)]
15802        #[allow(unused_comparisons)]
15803        if __tmp.remaining() < Self::ENCODED_LEN {
15804            panic!(
15805                "buffer is too small (need {} bytes, but got {})",
15806                Self::ENCODED_LEN,
15807                __tmp.remaining(),
15808            )
15809        }
15810        __tmp.put_u64_le(self.time_usec);
15811        __tmp.put_f32_le(self.roll);
15812        __tmp.put_f32_le(self.pitch);
15813        __tmp.put_f32_le(self.yaw);
15814        __tmp.put_f32_le(self.rollspeed);
15815        __tmp.put_f32_le(self.pitchspeed);
15816        __tmp.put_f32_le(self.yawspeed);
15817        __tmp.put_i32_le(self.lat);
15818        __tmp.put_i32_le(self.lon);
15819        __tmp.put_i32_le(self.alt);
15820        __tmp.put_i16_le(self.vx);
15821        __tmp.put_i16_le(self.vy);
15822        __tmp.put_i16_le(self.vz);
15823        __tmp.put_i16_le(self.xacc);
15824        __tmp.put_i16_le(self.yacc);
15825        __tmp.put_i16_le(self.zacc);
15826        if matches!(version, MavlinkVersion::V2) {
15827            let len = __tmp.len();
15828            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
15829        } else {
15830            __tmp.len()
15831        }
15832    }
15833}
15834#[doc = "id: 115"]
15835#[doc = "Sent from simulation to autopilot, avoids in contrast to HIL_STATE singularities. This packet is useful for high throughput applications such as hardware in the loop simulations."]
15836#[derive(Debug, Clone, PartialEq)]
15837#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15838#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15839pub struct HIL_STATE_QUATERNION_DATA {
15840    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
15841    pub time_usec: u64,
15842    #[doc = "Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation)"]
15843    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
15844    pub attitude_quaternion: [f32; 4],
15845    #[doc = "Body frame roll / phi angular speed"]
15846    pub rollspeed: f32,
15847    #[doc = "Body frame pitch / theta angular speed"]
15848    pub pitchspeed: f32,
15849    #[doc = "Body frame yaw / psi angular speed"]
15850    pub yawspeed: f32,
15851    #[doc = "Latitude"]
15852    pub lat: i32,
15853    #[doc = "Longitude"]
15854    pub lon: i32,
15855    #[doc = "Altitude"]
15856    pub alt: i32,
15857    #[doc = "Ground X Speed (Latitude)"]
15858    pub vx: i16,
15859    #[doc = "Ground Y Speed (Longitude)"]
15860    pub vy: i16,
15861    #[doc = "Ground Z Speed (Altitude)"]
15862    pub vz: i16,
15863    #[doc = "Indicated airspeed"]
15864    pub ind_airspeed: u16,
15865    #[doc = "True airspeed"]
15866    pub true_airspeed: u16,
15867    #[doc = "X acceleration"]
15868    pub xacc: i16,
15869    #[doc = "Y acceleration"]
15870    pub yacc: i16,
15871    #[doc = "Z acceleration"]
15872    pub zacc: i16,
15873}
15874impl HIL_STATE_QUATERNION_DATA {
15875    pub const ENCODED_LEN: usize = 64usize;
15876    pub const DEFAULT: Self = Self {
15877        time_usec: 0_u64,
15878        attitude_quaternion: [0.0_f32; 4usize],
15879        rollspeed: 0.0_f32,
15880        pitchspeed: 0.0_f32,
15881        yawspeed: 0.0_f32,
15882        lat: 0_i32,
15883        lon: 0_i32,
15884        alt: 0_i32,
15885        vx: 0_i16,
15886        vy: 0_i16,
15887        vz: 0_i16,
15888        ind_airspeed: 0_u16,
15889        true_airspeed: 0_u16,
15890        xacc: 0_i16,
15891        yacc: 0_i16,
15892        zacc: 0_i16,
15893    };
15894    #[cfg(feature = "arbitrary")]
15895    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
15896        use arbitrary::{Arbitrary, Unstructured};
15897        let mut buf = [0u8; 1024];
15898        rng.fill_bytes(&mut buf);
15899        let mut unstructured = Unstructured::new(&buf);
15900        Self::arbitrary(&mut unstructured).unwrap_or_default()
15901    }
15902}
15903impl Default for HIL_STATE_QUATERNION_DATA {
15904    fn default() -> Self {
15905        Self::DEFAULT.clone()
15906    }
15907}
15908impl MessageData for HIL_STATE_QUATERNION_DATA {
15909    type Message = MavMessage;
15910    const ID: u32 = 115u32;
15911    const NAME: &'static str = "HIL_STATE_QUATERNION";
15912    const EXTRA_CRC: u8 = 4u8;
15913    const ENCODED_LEN: usize = 64usize;
15914    fn deser(
15915        _version: MavlinkVersion,
15916        __input: &[u8],
15917    ) -> Result<Self, ::mavlink_core::error::ParserError> {
15918        let avail_len = __input.len();
15919        let mut payload_buf = [0; Self::ENCODED_LEN];
15920        let mut buf = if avail_len < Self::ENCODED_LEN {
15921            payload_buf[0..avail_len].copy_from_slice(__input);
15922            Bytes::new(&payload_buf)
15923        } else {
15924            Bytes::new(__input)
15925        };
15926        let mut __struct = Self::default();
15927        __struct.time_usec = buf.get_u64_le();
15928        for v in &mut __struct.attitude_quaternion {
15929            let val = buf.get_f32_le();
15930            *v = val;
15931        }
15932        __struct.rollspeed = buf.get_f32_le();
15933        __struct.pitchspeed = buf.get_f32_le();
15934        __struct.yawspeed = buf.get_f32_le();
15935        __struct.lat = buf.get_i32_le();
15936        __struct.lon = buf.get_i32_le();
15937        __struct.alt = buf.get_i32_le();
15938        __struct.vx = buf.get_i16_le();
15939        __struct.vy = buf.get_i16_le();
15940        __struct.vz = buf.get_i16_le();
15941        __struct.ind_airspeed = buf.get_u16_le();
15942        __struct.true_airspeed = buf.get_u16_le();
15943        __struct.xacc = buf.get_i16_le();
15944        __struct.yacc = buf.get_i16_le();
15945        __struct.zacc = buf.get_i16_le();
15946        Ok(__struct)
15947    }
15948    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
15949        let mut __tmp = BytesMut::new(bytes);
15950        #[allow(clippy::absurd_extreme_comparisons)]
15951        #[allow(unused_comparisons)]
15952        if __tmp.remaining() < Self::ENCODED_LEN {
15953            panic!(
15954                "buffer is too small (need {} bytes, but got {})",
15955                Self::ENCODED_LEN,
15956                __tmp.remaining(),
15957            )
15958        }
15959        __tmp.put_u64_le(self.time_usec);
15960        for val in &self.attitude_quaternion {
15961            __tmp.put_f32_le(*val);
15962        }
15963        __tmp.put_f32_le(self.rollspeed);
15964        __tmp.put_f32_le(self.pitchspeed);
15965        __tmp.put_f32_le(self.yawspeed);
15966        __tmp.put_i32_le(self.lat);
15967        __tmp.put_i32_le(self.lon);
15968        __tmp.put_i32_le(self.alt);
15969        __tmp.put_i16_le(self.vx);
15970        __tmp.put_i16_le(self.vy);
15971        __tmp.put_i16_le(self.vz);
15972        __tmp.put_u16_le(self.ind_airspeed);
15973        __tmp.put_u16_le(self.true_airspeed);
15974        __tmp.put_i16_le(self.xacc);
15975        __tmp.put_i16_le(self.yacc);
15976        __tmp.put_i16_le(self.zacc);
15977        if matches!(version, MavlinkVersion::V2) {
15978            let len = __tmp.len();
15979            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
15980        } else {
15981            __tmp.len()
15982        }
15983    }
15984}
15985#[doc = "id: 242"]
15986#[doc = "Contains the home position. \tThe home position is the default position that the system will return to and land on. \tThe position must be set automatically by the system during the takeoff, and may also be explicitly set using MAV_CMD_DO_SET_HOME. \tThe global and local positions encode the position in the respective coordinate frames, while the q parameter encodes the orientation of the surface. \tUnder normal conditions it describes the heading and terrain slope, which can be used by the aircraft to adjust the approach. \tThe approach 3D vector describes the point to which the system should fly in normal flight mode and then perform a landing sequence along the vector.         Note: this message can be requested by sending the MAV_CMD_REQUEST_MESSAGE with param1=242 (or the deprecated MAV_CMD_GET_HOME_POSITION command)."]
15987#[derive(Debug, Clone, PartialEq)]
15988#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15989#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15990pub struct HOME_POSITION_DATA {
15991    #[doc = "Latitude (WGS84)"]
15992    pub latitude: i32,
15993    #[doc = "Longitude (WGS84)"]
15994    pub longitude: i32,
15995    #[doc = "Altitude (MSL). Positive for up."]
15996    pub altitude: i32,
15997    #[doc = "Local X position of this position in the local coordinate frame (NED)"]
15998    pub x: f32,
15999    #[doc = "Local Y position of this position in the local coordinate frame (NED)"]
16000    pub y: f32,
16001    #[doc = "Local Z position of this position in the local coordinate frame (NED: positive \"down\")"]
16002    pub z: f32,
16003    #[doc = "Quaternion indicating world-to-surface-normal and heading transformation of the takeoff position.         Used to indicate the heading and slope of the ground.         All fields should be set to NaN if an accurate quaternion for both heading and surface slope cannot be supplied."]
16004    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
16005    pub q: [f32; 4],
16006    #[doc = "Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone."]
16007    pub approach_x: f32,
16008    #[doc = "Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone."]
16009    pub approach_y: f32,
16010    #[doc = "Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone."]
16011    pub approach_z: f32,
16012    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
16013    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
16014    pub time_usec: u64,
16015}
16016impl HOME_POSITION_DATA {
16017    pub const ENCODED_LEN: usize = 60usize;
16018    pub const DEFAULT: Self = Self {
16019        latitude: 0_i32,
16020        longitude: 0_i32,
16021        altitude: 0_i32,
16022        x: 0.0_f32,
16023        y: 0.0_f32,
16024        z: 0.0_f32,
16025        q: [0.0_f32; 4usize],
16026        approach_x: 0.0_f32,
16027        approach_y: 0.0_f32,
16028        approach_z: 0.0_f32,
16029        time_usec: 0_u64,
16030    };
16031    #[cfg(feature = "arbitrary")]
16032    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
16033        use arbitrary::{Arbitrary, Unstructured};
16034        let mut buf = [0u8; 1024];
16035        rng.fill_bytes(&mut buf);
16036        let mut unstructured = Unstructured::new(&buf);
16037        Self::arbitrary(&mut unstructured).unwrap_or_default()
16038    }
16039}
16040impl Default for HOME_POSITION_DATA {
16041    fn default() -> Self {
16042        Self::DEFAULT.clone()
16043    }
16044}
16045impl MessageData for HOME_POSITION_DATA {
16046    type Message = MavMessage;
16047    const ID: u32 = 242u32;
16048    const NAME: &'static str = "HOME_POSITION";
16049    const EXTRA_CRC: u8 = 104u8;
16050    const ENCODED_LEN: usize = 60usize;
16051    fn deser(
16052        _version: MavlinkVersion,
16053        __input: &[u8],
16054    ) -> Result<Self, ::mavlink_core::error::ParserError> {
16055        let avail_len = __input.len();
16056        let mut payload_buf = [0; Self::ENCODED_LEN];
16057        let mut buf = if avail_len < Self::ENCODED_LEN {
16058            payload_buf[0..avail_len].copy_from_slice(__input);
16059            Bytes::new(&payload_buf)
16060        } else {
16061            Bytes::new(__input)
16062        };
16063        let mut __struct = Self::default();
16064        __struct.latitude = buf.get_i32_le();
16065        __struct.longitude = buf.get_i32_le();
16066        __struct.altitude = buf.get_i32_le();
16067        __struct.x = buf.get_f32_le();
16068        __struct.y = buf.get_f32_le();
16069        __struct.z = buf.get_f32_le();
16070        for v in &mut __struct.q {
16071            let val = buf.get_f32_le();
16072            *v = val;
16073        }
16074        __struct.approach_x = buf.get_f32_le();
16075        __struct.approach_y = buf.get_f32_le();
16076        __struct.approach_z = buf.get_f32_le();
16077        __struct.time_usec = buf.get_u64_le();
16078        Ok(__struct)
16079    }
16080    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
16081        let mut __tmp = BytesMut::new(bytes);
16082        #[allow(clippy::absurd_extreme_comparisons)]
16083        #[allow(unused_comparisons)]
16084        if __tmp.remaining() < Self::ENCODED_LEN {
16085            panic!(
16086                "buffer is too small (need {} bytes, but got {})",
16087                Self::ENCODED_LEN,
16088                __tmp.remaining(),
16089            )
16090        }
16091        __tmp.put_i32_le(self.latitude);
16092        __tmp.put_i32_le(self.longitude);
16093        __tmp.put_i32_le(self.altitude);
16094        __tmp.put_f32_le(self.x);
16095        __tmp.put_f32_le(self.y);
16096        __tmp.put_f32_le(self.z);
16097        for val in &self.q {
16098            __tmp.put_f32_le(*val);
16099        }
16100        __tmp.put_f32_le(self.approach_x);
16101        __tmp.put_f32_le(self.approach_y);
16102        __tmp.put_f32_le(self.approach_z);
16103        __tmp.put_u64_le(self.time_usec);
16104        if matches!(version, MavlinkVersion::V2) {
16105            let len = __tmp.len();
16106            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
16107        } else {
16108            __tmp.len()
16109        }
16110    }
16111}
16112#[doc = "id: 12920"]
16113#[doc = "Temperature and humidity from hygrometer."]
16114#[derive(Debug, Clone, PartialEq)]
16115#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16116#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16117pub struct HYGROMETER_SENSOR_DATA {
16118    #[doc = "Temperature"]
16119    pub temperature: i16,
16120    #[doc = "Humidity"]
16121    pub humidity: u16,
16122    #[doc = "Hygrometer ID"]
16123    pub id: u8,
16124}
16125impl HYGROMETER_SENSOR_DATA {
16126    pub const ENCODED_LEN: usize = 5usize;
16127    pub const DEFAULT: Self = Self {
16128        temperature: 0_i16,
16129        humidity: 0_u16,
16130        id: 0_u8,
16131    };
16132    #[cfg(feature = "arbitrary")]
16133    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
16134        use arbitrary::{Arbitrary, Unstructured};
16135        let mut buf = [0u8; 1024];
16136        rng.fill_bytes(&mut buf);
16137        let mut unstructured = Unstructured::new(&buf);
16138        Self::arbitrary(&mut unstructured).unwrap_or_default()
16139    }
16140}
16141impl Default for HYGROMETER_SENSOR_DATA {
16142    fn default() -> Self {
16143        Self::DEFAULT.clone()
16144    }
16145}
16146impl MessageData for HYGROMETER_SENSOR_DATA {
16147    type Message = MavMessage;
16148    const ID: u32 = 12920u32;
16149    const NAME: &'static str = "HYGROMETER_SENSOR";
16150    const EXTRA_CRC: u8 = 20u8;
16151    const ENCODED_LEN: usize = 5usize;
16152    fn deser(
16153        _version: MavlinkVersion,
16154        __input: &[u8],
16155    ) -> Result<Self, ::mavlink_core::error::ParserError> {
16156        let avail_len = __input.len();
16157        let mut payload_buf = [0; Self::ENCODED_LEN];
16158        let mut buf = if avail_len < Self::ENCODED_LEN {
16159            payload_buf[0..avail_len].copy_from_slice(__input);
16160            Bytes::new(&payload_buf)
16161        } else {
16162            Bytes::new(__input)
16163        };
16164        let mut __struct = Self::default();
16165        __struct.temperature = buf.get_i16_le();
16166        __struct.humidity = buf.get_u16_le();
16167        __struct.id = buf.get_u8();
16168        Ok(__struct)
16169    }
16170    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
16171        let mut __tmp = BytesMut::new(bytes);
16172        #[allow(clippy::absurd_extreme_comparisons)]
16173        #[allow(unused_comparisons)]
16174        if __tmp.remaining() < Self::ENCODED_LEN {
16175            panic!(
16176                "buffer is too small (need {} bytes, but got {})",
16177                Self::ENCODED_LEN,
16178                __tmp.remaining(),
16179            )
16180        }
16181        __tmp.put_i16_le(self.temperature);
16182        __tmp.put_u16_le(self.humidity);
16183        __tmp.put_u8(self.id);
16184        if matches!(version, MavlinkVersion::V2) {
16185            let len = __tmp.len();
16186            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
16187        } else {
16188            __tmp.len()
16189        }
16190    }
16191}
16192#[doc = "id: 440"]
16193#[doc = "Illuminator status."]
16194#[derive(Debug, Clone, PartialEq)]
16195#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16196#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16197pub struct ILLUMINATOR_STATUS_DATA {
16198    #[doc = "Time since the start-up of the illuminator in ms"]
16199    pub uptime_ms: u32,
16200    #[doc = "Errors"]
16201    pub error_status: IlluminatorErrorFlags,
16202    #[doc = "Illuminator brightness"]
16203    pub brightness: f32,
16204    #[doc = "Illuminator strobing period in seconds"]
16205    pub strobe_period: f32,
16206    #[doc = "Illuminator strobing duty cycle"]
16207    pub strobe_duty_cycle: f32,
16208    #[doc = "Temperature in Celsius"]
16209    pub temp_c: f32,
16210    #[doc = "Minimum strobing period in seconds"]
16211    pub min_strobe_period: f32,
16212    #[doc = "Maximum strobing period in seconds"]
16213    pub max_strobe_period: f32,
16214    #[doc = "0: Illuminators OFF, 1: Illuminators ON"]
16215    pub enable: u8,
16216    #[doc = "Supported illuminator modes"]
16217    pub mode_bitmask: IlluminatorMode,
16218    #[doc = "Illuminator mode"]
16219    pub mode: IlluminatorMode,
16220}
16221impl ILLUMINATOR_STATUS_DATA {
16222    pub const ENCODED_LEN: usize = 35usize;
16223    pub const DEFAULT: Self = Self {
16224        uptime_ms: 0_u32,
16225        error_status: IlluminatorErrorFlags::DEFAULT,
16226        brightness: 0.0_f32,
16227        strobe_period: 0.0_f32,
16228        strobe_duty_cycle: 0.0_f32,
16229        temp_c: 0.0_f32,
16230        min_strobe_period: 0.0_f32,
16231        max_strobe_period: 0.0_f32,
16232        enable: 0_u8,
16233        mode_bitmask: IlluminatorMode::DEFAULT,
16234        mode: IlluminatorMode::DEFAULT,
16235    };
16236    #[cfg(feature = "arbitrary")]
16237    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
16238        use arbitrary::{Arbitrary, Unstructured};
16239        let mut buf = [0u8; 1024];
16240        rng.fill_bytes(&mut buf);
16241        let mut unstructured = Unstructured::new(&buf);
16242        Self::arbitrary(&mut unstructured).unwrap_or_default()
16243    }
16244}
16245impl Default for ILLUMINATOR_STATUS_DATA {
16246    fn default() -> Self {
16247        Self::DEFAULT.clone()
16248    }
16249}
16250impl MessageData for ILLUMINATOR_STATUS_DATA {
16251    type Message = MavMessage;
16252    const ID: u32 = 440u32;
16253    const NAME: &'static str = "ILLUMINATOR_STATUS";
16254    const EXTRA_CRC: u8 = 66u8;
16255    const ENCODED_LEN: usize = 35usize;
16256    fn deser(
16257        _version: MavlinkVersion,
16258        __input: &[u8],
16259    ) -> Result<Self, ::mavlink_core::error::ParserError> {
16260        let avail_len = __input.len();
16261        let mut payload_buf = [0; Self::ENCODED_LEN];
16262        let mut buf = if avail_len < Self::ENCODED_LEN {
16263            payload_buf[0..avail_len].copy_from_slice(__input);
16264            Bytes::new(&payload_buf)
16265        } else {
16266            Bytes::new(__input)
16267        };
16268        let mut __struct = Self::default();
16269        __struct.uptime_ms = buf.get_u32_le();
16270        let tmp = buf.get_u32_le();
16271        __struct.error_status = IlluminatorErrorFlags::from_bits(
16272            tmp & IlluminatorErrorFlags::all().bits(),
16273        )
16274        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
16275            flag_type: "IlluminatorErrorFlags",
16276            value: tmp as u32,
16277        })?;
16278        __struct.brightness = buf.get_f32_le();
16279        __struct.strobe_period = buf.get_f32_le();
16280        __struct.strobe_duty_cycle = buf.get_f32_le();
16281        __struct.temp_c = buf.get_f32_le();
16282        __struct.min_strobe_period = buf.get_f32_le();
16283        __struct.max_strobe_period = buf.get_f32_le();
16284        __struct.enable = buf.get_u8();
16285        let tmp = buf.get_u8();
16286        __struct.mode_bitmask =
16287            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
16288                enum_type: "IlluminatorMode",
16289                value: tmp as u32,
16290            })?;
16291        let tmp = buf.get_u8();
16292        __struct.mode =
16293            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
16294                enum_type: "IlluminatorMode",
16295                value: tmp as u32,
16296            })?;
16297        Ok(__struct)
16298    }
16299    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
16300        let mut __tmp = BytesMut::new(bytes);
16301        #[allow(clippy::absurd_extreme_comparisons)]
16302        #[allow(unused_comparisons)]
16303        if __tmp.remaining() < Self::ENCODED_LEN {
16304            panic!(
16305                "buffer is too small (need {} bytes, but got {})",
16306                Self::ENCODED_LEN,
16307                __tmp.remaining(),
16308            )
16309        }
16310        __tmp.put_u32_le(self.uptime_ms);
16311        __tmp.put_u32_le(self.error_status.bits());
16312        __tmp.put_f32_le(self.brightness);
16313        __tmp.put_f32_le(self.strobe_period);
16314        __tmp.put_f32_le(self.strobe_duty_cycle);
16315        __tmp.put_f32_le(self.temp_c);
16316        __tmp.put_f32_le(self.min_strobe_period);
16317        __tmp.put_f32_le(self.max_strobe_period);
16318        __tmp.put_u8(self.enable);
16319        __tmp.put_u8(self.mode_bitmask as u8);
16320        __tmp.put_u8(self.mode as u8);
16321        if matches!(version, MavlinkVersion::V2) {
16322            let len = __tmp.len();
16323            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
16324        } else {
16325            __tmp.len()
16326        }
16327    }
16328}
16329#[doc = "id: 335"]
16330#[doc = "Status of the Iridium SBD link."]
16331#[derive(Debug, Clone, PartialEq)]
16332#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16333#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16334pub struct ISBD_LINK_STATUS_DATA {
16335    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
16336    pub timestamp: u64,
16337    #[doc = "Timestamp of the last successful sbd session. The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
16338    pub last_heartbeat: u64,
16339    #[doc = "Number of failed SBD sessions."]
16340    pub failed_sessions: u16,
16341    #[doc = "Number of successful SBD sessions."]
16342    pub successful_sessions: u16,
16343    #[doc = "Signal quality equal to the number of bars displayed on the ISU signal strength indicator. Range is 0 to 5, where 0 indicates no signal and 5 indicates maximum signal strength."]
16344    pub signal_quality: u8,
16345    #[doc = "1: Ring call pending, 0: No call pending."]
16346    pub ring_pending: u8,
16347    #[doc = "1: Transmission session pending, 0: No transmission session pending."]
16348    pub tx_session_pending: u8,
16349    #[doc = "1: Receiving session pending, 0: No receiving session pending."]
16350    pub rx_session_pending: u8,
16351}
16352impl ISBD_LINK_STATUS_DATA {
16353    pub const ENCODED_LEN: usize = 24usize;
16354    pub const DEFAULT: Self = Self {
16355        timestamp: 0_u64,
16356        last_heartbeat: 0_u64,
16357        failed_sessions: 0_u16,
16358        successful_sessions: 0_u16,
16359        signal_quality: 0_u8,
16360        ring_pending: 0_u8,
16361        tx_session_pending: 0_u8,
16362        rx_session_pending: 0_u8,
16363    };
16364    #[cfg(feature = "arbitrary")]
16365    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
16366        use arbitrary::{Arbitrary, Unstructured};
16367        let mut buf = [0u8; 1024];
16368        rng.fill_bytes(&mut buf);
16369        let mut unstructured = Unstructured::new(&buf);
16370        Self::arbitrary(&mut unstructured).unwrap_or_default()
16371    }
16372}
16373impl Default for ISBD_LINK_STATUS_DATA {
16374    fn default() -> Self {
16375        Self::DEFAULT.clone()
16376    }
16377}
16378impl MessageData for ISBD_LINK_STATUS_DATA {
16379    type Message = MavMessage;
16380    const ID: u32 = 335u32;
16381    const NAME: &'static str = "ISBD_LINK_STATUS";
16382    const EXTRA_CRC: u8 = 225u8;
16383    const ENCODED_LEN: usize = 24usize;
16384    fn deser(
16385        _version: MavlinkVersion,
16386        __input: &[u8],
16387    ) -> Result<Self, ::mavlink_core::error::ParserError> {
16388        let avail_len = __input.len();
16389        let mut payload_buf = [0; Self::ENCODED_LEN];
16390        let mut buf = if avail_len < Self::ENCODED_LEN {
16391            payload_buf[0..avail_len].copy_from_slice(__input);
16392            Bytes::new(&payload_buf)
16393        } else {
16394            Bytes::new(__input)
16395        };
16396        let mut __struct = Self::default();
16397        __struct.timestamp = buf.get_u64_le();
16398        __struct.last_heartbeat = buf.get_u64_le();
16399        __struct.failed_sessions = buf.get_u16_le();
16400        __struct.successful_sessions = buf.get_u16_le();
16401        __struct.signal_quality = buf.get_u8();
16402        __struct.ring_pending = buf.get_u8();
16403        __struct.tx_session_pending = buf.get_u8();
16404        __struct.rx_session_pending = buf.get_u8();
16405        Ok(__struct)
16406    }
16407    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
16408        let mut __tmp = BytesMut::new(bytes);
16409        #[allow(clippy::absurd_extreme_comparisons)]
16410        #[allow(unused_comparisons)]
16411        if __tmp.remaining() < Self::ENCODED_LEN {
16412            panic!(
16413                "buffer is too small (need {} bytes, but got {})",
16414                Self::ENCODED_LEN,
16415                __tmp.remaining(),
16416            )
16417        }
16418        __tmp.put_u64_le(self.timestamp);
16419        __tmp.put_u64_le(self.last_heartbeat);
16420        __tmp.put_u16_le(self.failed_sessions);
16421        __tmp.put_u16_le(self.successful_sessions);
16422        __tmp.put_u8(self.signal_quality);
16423        __tmp.put_u8(self.ring_pending);
16424        __tmp.put_u8(self.tx_session_pending);
16425        __tmp.put_u8(self.rx_session_pending);
16426        if matches!(version, MavlinkVersion::V2) {
16427            let len = __tmp.len();
16428            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
16429        } else {
16430            __tmp.len()
16431        }
16432    }
16433}
16434#[doc = "id: 149"]
16435#[doc = "The location of a landing target. See: <https://mavlink.io/en/services/landing_target.html>."]
16436#[derive(Debug, Clone, PartialEq)]
16437#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16438#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16439pub struct LANDING_TARGET_DATA {
16440    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
16441    pub time_usec: u64,
16442    #[doc = "X-axis angular offset of the target from the center of the image"]
16443    pub angle_x: f32,
16444    #[doc = "Y-axis angular offset of the target from the center of the image"]
16445    pub angle_y: f32,
16446    #[doc = "Distance to the target from the vehicle"]
16447    pub distance: f32,
16448    #[doc = "Size of target along x-axis"]
16449    pub size_x: f32,
16450    #[doc = "Size of target along y-axis"]
16451    pub size_y: f32,
16452    #[doc = "The ID of the target if multiple targets are present"]
16453    pub target_num: u8,
16454    #[doc = "Coordinate frame used for following fields."]
16455    pub frame: MavFrame,
16456    #[doc = "X Position of the landing target in MAV_FRAME"]
16457    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
16458    pub x: f32,
16459    #[doc = "Y Position of the landing target in MAV_FRAME"]
16460    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
16461    pub y: f32,
16462    #[doc = "Z Position of the landing target in MAV_FRAME"]
16463    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
16464    pub z: f32,
16465    #[doc = "Quaternion of landing target orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)"]
16466    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
16467    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
16468    pub q: [f32; 4],
16469    #[doc = "Type of landing target"]
16470    #[cfg_attr(feature = "serde", serde(default))]
16471    pub mavtype: LandingTargetType,
16472    #[doc = "Boolean indicating whether the position fields (x, y, z, q, type) contain valid target position information (valid: 1, invalid: 0). Default is 0 (invalid)."]
16473    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
16474    pub position_valid: u8,
16475}
16476impl LANDING_TARGET_DATA {
16477    pub const ENCODED_LEN: usize = 60usize;
16478    pub const DEFAULT: Self = Self {
16479        time_usec: 0_u64,
16480        angle_x: 0.0_f32,
16481        angle_y: 0.0_f32,
16482        distance: 0.0_f32,
16483        size_x: 0.0_f32,
16484        size_y: 0.0_f32,
16485        target_num: 0_u8,
16486        frame: MavFrame::DEFAULT,
16487        x: 0.0_f32,
16488        y: 0.0_f32,
16489        z: 0.0_f32,
16490        q: [0.0_f32; 4usize],
16491        mavtype: LandingTargetType::DEFAULT,
16492        position_valid: 0_u8,
16493    };
16494    #[cfg(feature = "arbitrary")]
16495    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
16496        use arbitrary::{Arbitrary, Unstructured};
16497        let mut buf = [0u8; 1024];
16498        rng.fill_bytes(&mut buf);
16499        let mut unstructured = Unstructured::new(&buf);
16500        Self::arbitrary(&mut unstructured).unwrap_or_default()
16501    }
16502}
16503impl Default for LANDING_TARGET_DATA {
16504    fn default() -> Self {
16505        Self::DEFAULT.clone()
16506    }
16507}
16508impl MessageData for LANDING_TARGET_DATA {
16509    type Message = MavMessage;
16510    const ID: u32 = 149u32;
16511    const NAME: &'static str = "LANDING_TARGET";
16512    const EXTRA_CRC: u8 = 200u8;
16513    const ENCODED_LEN: usize = 60usize;
16514    fn deser(
16515        _version: MavlinkVersion,
16516        __input: &[u8],
16517    ) -> Result<Self, ::mavlink_core::error::ParserError> {
16518        let avail_len = __input.len();
16519        let mut payload_buf = [0; Self::ENCODED_LEN];
16520        let mut buf = if avail_len < Self::ENCODED_LEN {
16521            payload_buf[0..avail_len].copy_from_slice(__input);
16522            Bytes::new(&payload_buf)
16523        } else {
16524            Bytes::new(__input)
16525        };
16526        let mut __struct = Self::default();
16527        __struct.time_usec = buf.get_u64_le();
16528        __struct.angle_x = buf.get_f32_le();
16529        __struct.angle_y = buf.get_f32_le();
16530        __struct.distance = buf.get_f32_le();
16531        __struct.size_x = buf.get_f32_le();
16532        __struct.size_y = buf.get_f32_le();
16533        __struct.target_num = buf.get_u8();
16534        let tmp = buf.get_u8();
16535        __struct.frame =
16536            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
16537                enum_type: "MavFrame",
16538                value: tmp as u32,
16539            })?;
16540        __struct.x = buf.get_f32_le();
16541        __struct.y = buf.get_f32_le();
16542        __struct.z = buf.get_f32_le();
16543        for v in &mut __struct.q {
16544            let val = buf.get_f32_le();
16545            *v = val;
16546        }
16547        let tmp = buf.get_u8();
16548        __struct.mavtype =
16549            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
16550                enum_type: "LandingTargetType",
16551                value: tmp as u32,
16552            })?;
16553        __struct.position_valid = buf.get_u8();
16554        Ok(__struct)
16555    }
16556    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
16557        let mut __tmp = BytesMut::new(bytes);
16558        #[allow(clippy::absurd_extreme_comparisons)]
16559        #[allow(unused_comparisons)]
16560        if __tmp.remaining() < Self::ENCODED_LEN {
16561            panic!(
16562                "buffer is too small (need {} bytes, but got {})",
16563                Self::ENCODED_LEN,
16564                __tmp.remaining(),
16565            )
16566        }
16567        __tmp.put_u64_le(self.time_usec);
16568        __tmp.put_f32_le(self.angle_x);
16569        __tmp.put_f32_le(self.angle_y);
16570        __tmp.put_f32_le(self.distance);
16571        __tmp.put_f32_le(self.size_x);
16572        __tmp.put_f32_le(self.size_y);
16573        __tmp.put_u8(self.target_num);
16574        __tmp.put_u8(self.frame as u8);
16575        __tmp.put_f32_le(self.x);
16576        __tmp.put_f32_le(self.y);
16577        __tmp.put_f32_le(self.z);
16578        for val in &self.q {
16579            __tmp.put_f32_le(*val);
16580        }
16581        __tmp.put_u8(self.mavtype as u8);
16582        __tmp.put_u8(self.position_valid);
16583        if matches!(version, MavlinkVersion::V2) {
16584            let len = __tmp.len();
16585            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
16586        } else {
16587            __tmp.len()
16588        }
16589    }
16590}
16591#[doc = "id: 8"]
16592#[doc = "Status generated in each node in the communication chain and injected into MAVLink stream."]
16593#[derive(Debug, Clone, PartialEq)]
16594#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16595#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16596pub struct LINK_NODE_STATUS_DATA {
16597    #[doc = "Timestamp (time since system boot)."]
16598    pub timestamp: u64,
16599    #[doc = "Transmit rate"]
16600    pub tx_rate: u32,
16601    #[doc = "Receive rate"]
16602    pub rx_rate: u32,
16603    #[doc = "Messages sent"]
16604    pub messages_sent: u32,
16605    #[doc = "Messages received (estimated from counting seq)"]
16606    pub messages_received: u32,
16607    #[doc = "Messages lost (estimated from counting seq)"]
16608    pub messages_lost: u32,
16609    #[doc = "Number of bytes that could not be parsed correctly."]
16610    pub rx_parse_err: u16,
16611    #[doc = "Transmit buffer overflows. This number wraps around as it reaches UINT16_MAX"]
16612    pub tx_overflows: u16,
16613    #[doc = "Receive buffer overflows. This number wraps around as it reaches UINT16_MAX"]
16614    pub rx_overflows: u16,
16615    #[doc = "Remaining free transmit buffer space"]
16616    pub tx_buf: u8,
16617    #[doc = "Remaining free receive buffer space"]
16618    pub rx_buf: u8,
16619}
16620impl LINK_NODE_STATUS_DATA {
16621    pub const ENCODED_LEN: usize = 36usize;
16622    pub const DEFAULT: Self = Self {
16623        timestamp: 0_u64,
16624        tx_rate: 0_u32,
16625        rx_rate: 0_u32,
16626        messages_sent: 0_u32,
16627        messages_received: 0_u32,
16628        messages_lost: 0_u32,
16629        rx_parse_err: 0_u16,
16630        tx_overflows: 0_u16,
16631        rx_overflows: 0_u16,
16632        tx_buf: 0_u8,
16633        rx_buf: 0_u8,
16634    };
16635    #[cfg(feature = "arbitrary")]
16636    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
16637        use arbitrary::{Arbitrary, Unstructured};
16638        let mut buf = [0u8; 1024];
16639        rng.fill_bytes(&mut buf);
16640        let mut unstructured = Unstructured::new(&buf);
16641        Self::arbitrary(&mut unstructured).unwrap_or_default()
16642    }
16643}
16644impl Default for LINK_NODE_STATUS_DATA {
16645    fn default() -> Self {
16646        Self::DEFAULT.clone()
16647    }
16648}
16649impl MessageData for LINK_NODE_STATUS_DATA {
16650    type Message = MavMessage;
16651    const ID: u32 = 8u32;
16652    const NAME: &'static str = "LINK_NODE_STATUS";
16653    const EXTRA_CRC: u8 = 117u8;
16654    const ENCODED_LEN: usize = 36usize;
16655    fn deser(
16656        _version: MavlinkVersion,
16657        __input: &[u8],
16658    ) -> Result<Self, ::mavlink_core::error::ParserError> {
16659        let avail_len = __input.len();
16660        let mut payload_buf = [0; Self::ENCODED_LEN];
16661        let mut buf = if avail_len < Self::ENCODED_LEN {
16662            payload_buf[0..avail_len].copy_from_slice(__input);
16663            Bytes::new(&payload_buf)
16664        } else {
16665            Bytes::new(__input)
16666        };
16667        let mut __struct = Self::default();
16668        __struct.timestamp = buf.get_u64_le();
16669        __struct.tx_rate = buf.get_u32_le();
16670        __struct.rx_rate = buf.get_u32_le();
16671        __struct.messages_sent = buf.get_u32_le();
16672        __struct.messages_received = buf.get_u32_le();
16673        __struct.messages_lost = buf.get_u32_le();
16674        __struct.rx_parse_err = buf.get_u16_le();
16675        __struct.tx_overflows = buf.get_u16_le();
16676        __struct.rx_overflows = buf.get_u16_le();
16677        __struct.tx_buf = buf.get_u8();
16678        __struct.rx_buf = buf.get_u8();
16679        Ok(__struct)
16680    }
16681    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
16682        let mut __tmp = BytesMut::new(bytes);
16683        #[allow(clippy::absurd_extreme_comparisons)]
16684        #[allow(unused_comparisons)]
16685        if __tmp.remaining() < Self::ENCODED_LEN {
16686            panic!(
16687                "buffer is too small (need {} bytes, but got {})",
16688                Self::ENCODED_LEN,
16689                __tmp.remaining(),
16690            )
16691        }
16692        __tmp.put_u64_le(self.timestamp);
16693        __tmp.put_u32_le(self.tx_rate);
16694        __tmp.put_u32_le(self.rx_rate);
16695        __tmp.put_u32_le(self.messages_sent);
16696        __tmp.put_u32_le(self.messages_received);
16697        __tmp.put_u32_le(self.messages_lost);
16698        __tmp.put_u16_le(self.rx_parse_err);
16699        __tmp.put_u16_le(self.tx_overflows);
16700        __tmp.put_u16_le(self.rx_overflows);
16701        __tmp.put_u8(self.tx_buf);
16702        __tmp.put_u8(self.rx_buf);
16703        if matches!(version, MavlinkVersion::V2) {
16704            let len = __tmp.len();
16705            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
16706        } else {
16707            __tmp.len()
16708        }
16709    }
16710}
16711#[doc = "id: 32"]
16712#[doc = "The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention)."]
16713#[derive(Debug, Clone, PartialEq)]
16714#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16715#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16716pub struct LOCAL_POSITION_NED_DATA {
16717    #[doc = "Timestamp (time since system boot)."]
16718    pub time_boot_ms: u32,
16719    #[doc = "X Position"]
16720    pub x: f32,
16721    #[doc = "Y Position"]
16722    pub y: f32,
16723    #[doc = "Z Position"]
16724    pub z: f32,
16725    #[doc = "X Speed"]
16726    pub vx: f32,
16727    #[doc = "Y Speed"]
16728    pub vy: f32,
16729    #[doc = "Z Speed"]
16730    pub vz: f32,
16731}
16732impl LOCAL_POSITION_NED_DATA {
16733    pub const ENCODED_LEN: usize = 28usize;
16734    pub const DEFAULT: Self = Self {
16735        time_boot_ms: 0_u32,
16736        x: 0.0_f32,
16737        y: 0.0_f32,
16738        z: 0.0_f32,
16739        vx: 0.0_f32,
16740        vy: 0.0_f32,
16741        vz: 0.0_f32,
16742    };
16743    #[cfg(feature = "arbitrary")]
16744    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
16745        use arbitrary::{Arbitrary, Unstructured};
16746        let mut buf = [0u8; 1024];
16747        rng.fill_bytes(&mut buf);
16748        let mut unstructured = Unstructured::new(&buf);
16749        Self::arbitrary(&mut unstructured).unwrap_or_default()
16750    }
16751}
16752impl Default for LOCAL_POSITION_NED_DATA {
16753    fn default() -> Self {
16754        Self::DEFAULT.clone()
16755    }
16756}
16757impl MessageData for LOCAL_POSITION_NED_DATA {
16758    type Message = MavMessage;
16759    const ID: u32 = 32u32;
16760    const NAME: &'static str = "LOCAL_POSITION_NED";
16761    const EXTRA_CRC: u8 = 185u8;
16762    const ENCODED_LEN: usize = 28usize;
16763    fn deser(
16764        _version: MavlinkVersion,
16765        __input: &[u8],
16766    ) -> Result<Self, ::mavlink_core::error::ParserError> {
16767        let avail_len = __input.len();
16768        let mut payload_buf = [0; Self::ENCODED_LEN];
16769        let mut buf = if avail_len < Self::ENCODED_LEN {
16770            payload_buf[0..avail_len].copy_from_slice(__input);
16771            Bytes::new(&payload_buf)
16772        } else {
16773            Bytes::new(__input)
16774        };
16775        let mut __struct = Self::default();
16776        __struct.time_boot_ms = buf.get_u32_le();
16777        __struct.x = buf.get_f32_le();
16778        __struct.y = buf.get_f32_le();
16779        __struct.z = buf.get_f32_le();
16780        __struct.vx = buf.get_f32_le();
16781        __struct.vy = buf.get_f32_le();
16782        __struct.vz = buf.get_f32_le();
16783        Ok(__struct)
16784    }
16785    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
16786        let mut __tmp = BytesMut::new(bytes);
16787        #[allow(clippy::absurd_extreme_comparisons)]
16788        #[allow(unused_comparisons)]
16789        if __tmp.remaining() < Self::ENCODED_LEN {
16790            panic!(
16791                "buffer is too small (need {} bytes, but got {})",
16792                Self::ENCODED_LEN,
16793                __tmp.remaining(),
16794            )
16795        }
16796        __tmp.put_u32_le(self.time_boot_ms);
16797        __tmp.put_f32_le(self.x);
16798        __tmp.put_f32_le(self.y);
16799        __tmp.put_f32_le(self.z);
16800        __tmp.put_f32_le(self.vx);
16801        __tmp.put_f32_le(self.vy);
16802        __tmp.put_f32_le(self.vz);
16803        if matches!(version, MavlinkVersion::V2) {
16804            let len = __tmp.len();
16805            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
16806        } else {
16807            __tmp.len()
16808        }
16809    }
16810}
16811#[doc = "id: 64"]
16812#[doc = "The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention)."]
16813#[derive(Debug, Clone, PartialEq)]
16814#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16815#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16816pub struct LOCAL_POSITION_NED_COV_DATA {
16817    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
16818    pub time_usec: u64,
16819    #[doc = "X Position"]
16820    pub x: f32,
16821    #[doc = "Y Position"]
16822    pub y: f32,
16823    #[doc = "Z Position"]
16824    pub z: f32,
16825    #[doc = "X Speed"]
16826    pub vx: f32,
16827    #[doc = "Y Speed"]
16828    pub vy: f32,
16829    #[doc = "Z Speed"]
16830    pub vz: f32,
16831    #[doc = "X Acceleration"]
16832    pub ax: f32,
16833    #[doc = "Y Acceleration"]
16834    pub ay: f32,
16835    #[doc = "Z Acceleration"]
16836    pub az: f32,
16837    #[doc = "Row-major representation of position, velocity and acceleration 9x9 cross-covariance matrix upper right triangle (states: x, y, z, vx, vy, vz, ax, ay, az; first nine entries are the first ROW, next eight entries are the second row, etc.). If unknown, assign NaN value to first element in the array."]
16838    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
16839    pub covariance: [f32; 45],
16840    #[doc = "Class id of the estimator this estimate originated from."]
16841    pub estimator_type: MavEstimatorType,
16842}
16843impl LOCAL_POSITION_NED_COV_DATA {
16844    pub const ENCODED_LEN: usize = 225usize;
16845    pub const DEFAULT: Self = Self {
16846        time_usec: 0_u64,
16847        x: 0.0_f32,
16848        y: 0.0_f32,
16849        z: 0.0_f32,
16850        vx: 0.0_f32,
16851        vy: 0.0_f32,
16852        vz: 0.0_f32,
16853        ax: 0.0_f32,
16854        ay: 0.0_f32,
16855        az: 0.0_f32,
16856        covariance: [0.0_f32; 45usize],
16857        estimator_type: MavEstimatorType::DEFAULT,
16858    };
16859    #[cfg(feature = "arbitrary")]
16860    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
16861        use arbitrary::{Arbitrary, Unstructured};
16862        let mut buf = [0u8; 1024];
16863        rng.fill_bytes(&mut buf);
16864        let mut unstructured = Unstructured::new(&buf);
16865        Self::arbitrary(&mut unstructured).unwrap_or_default()
16866    }
16867}
16868impl Default for LOCAL_POSITION_NED_COV_DATA {
16869    fn default() -> Self {
16870        Self::DEFAULT.clone()
16871    }
16872}
16873impl MessageData for LOCAL_POSITION_NED_COV_DATA {
16874    type Message = MavMessage;
16875    const ID: u32 = 64u32;
16876    const NAME: &'static str = "LOCAL_POSITION_NED_COV";
16877    const EXTRA_CRC: u8 = 191u8;
16878    const ENCODED_LEN: usize = 225usize;
16879    fn deser(
16880        _version: MavlinkVersion,
16881        __input: &[u8],
16882    ) -> Result<Self, ::mavlink_core::error::ParserError> {
16883        let avail_len = __input.len();
16884        let mut payload_buf = [0; Self::ENCODED_LEN];
16885        let mut buf = if avail_len < Self::ENCODED_LEN {
16886            payload_buf[0..avail_len].copy_from_slice(__input);
16887            Bytes::new(&payload_buf)
16888        } else {
16889            Bytes::new(__input)
16890        };
16891        let mut __struct = Self::default();
16892        __struct.time_usec = buf.get_u64_le();
16893        __struct.x = buf.get_f32_le();
16894        __struct.y = buf.get_f32_le();
16895        __struct.z = buf.get_f32_le();
16896        __struct.vx = buf.get_f32_le();
16897        __struct.vy = buf.get_f32_le();
16898        __struct.vz = buf.get_f32_le();
16899        __struct.ax = buf.get_f32_le();
16900        __struct.ay = buf.get_f32_le();
16901        __struct.az = buf.get_f32_le();
16902        for v in &mut __struct.covariance {
16903            let val = buf.get_f32_le();
16904            *v = val;
16905        }
16906        let tmp = buf.get_u8();
16907        __struct.estimator_type =
16908            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
16909                enum_type: "MavEstimatorType",
16910                value: tmp as u32,
16911            })?;
16912        Ok(__struct)
16913    }
16914    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
16915        let mut __tmp = BytesMut::new(bytes);
16916        #[allow(clippy::absurd_extreme_comparisons)]
16917        #[allow(unused_comparisons)]
16918        if __tmp.remaining() < Self::ENCODED_LEN {
16919            panic!(
16920                "buffer is too small (need {} bytes, but got {})",
16921                Self::ENCODED_LEN,
16922                __tmp.remaining(),
16923            )
16924        }
16925        __tmp.put_u64_le(self.time_usec);
16926        __tmp.put_f32_le(self.x);
16927        __tmp.put_f32_le(self.y);
16928        __tmp.put_f32_le(self.z);
16929        __tmp.put_f32_le(self.vx);
16930        __tmp.put_f32_le(self.vy);
16931        __tmp.put_f32_le(self.vz);
16932        __tmp.put_f32_le(self.ax);
16933        __tmp.put_f32_le(self.ay);
16934        __tmp.put_f32_le(self.az);
16935        for val in &self.covariance {
16936            __tmp.put_f32_le(*val);
16937        }
16938        __tmp.put_u8(self.estimator_type as u8);
16939        if matches!(version, MavlinkVersion::V2) {
16940            let len = __tmp.len();
16941            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
16942        } else {
16943            __tmp.len()
16944        }
16945    }
16946}
16947#[doc = "id: 89"]
16948#[doc = "The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages of MAV X and the global coordinate frame in NED coordinates. Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention)."]
16949#[derive(Debug, Clone, PartialEq)]
16950#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16951#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16952pub struct LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA {
16953    #[doc = "Timestamp (time since system boot)."]
16954    pub time_boot_ms: u32,
16955    #[doc = "X Position"]
16956    pub x: f32,
16957    #[doc = "Y Position"]
16958    pub y: f32,
16959    #[doc = "Z Position"]
16960    pub z: f32,
16961    #[doc = "Roll"]
16962    pub roll: f32,
16963    #[doc = "Pitch"]
16964    pub pitch: f32,
16965    #[doc = "Yaw"]
16966    pub yaw: f32,
16967}
16968impl LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA {
16969    pub const ENCODED_LEN: usize = 28usize;
16970    pub const DEFAULT: Self = Self {
16971        time_boot_ms: 0_u32,
16972        x: 0.0_f32,
16973        y: 0.0_f32,
16974        z: 0.0_f32,
16975        roll: 0.0_f32,
16976        pitch: 0.0_f32,
16977        yaw: 0.0_f32,
16978    };
16979    #[cfg(feature = "arbitrary")]
16980    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
16981        use arbitrary::{Arbitrary, Unstructured};
16982        let mut buf = [0u8; 1024];
16983        rng.fill_bytes(&mut buf);
16984        let mut unstructured = Unstructured::new(&buf);
16985        Self::arbitrary(&mut unstructured).unwrap_or_default()
16986    }
16987}
16988impl Default for LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA {
16989    fn default() -> Self {
16990        Self::DEFAULT.clone()
16991    }
16992}
16993impl MessageData for LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA {
16994    type Message = MavMessage;
16995    const ID: u32 = 89u32;
16996    const NAME: &'static str = "LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET";
16997    const EXTRA_CRC: u8 = 231u8;
16998    const ENCODED_LEN: usize = 28usize;
16999    fn deser(
17000        _version: MavlinkVersion,
17001        __input: &[u8],
17002    ) -> Result<Self, ::mavlink_core::error::ParserError> {
17003        let avail_len = __input.len();
17004        let mut payload_buf = [0; Self::ENCODED_LEN];
17005        let mut buf = if avail_len < Self::ENCODED_LEN {
17006            payload_buf[0..avail_len].copy_from_slice(__input);
17007            Bytes::new(&payload_buf)
17008        } else {
17009            Bytes::new(__input)
17010        };
17011        let mut __struct = Self::default();
17012        __struct.time_boot_ms = buf.get_u32_le();
17013        __struct.x = buf.get_f32_le();
17014        __struct.y = buf.get_f32_le();
17015        __struct.z = buf.get_f32_le();
17016        __struct.roll = buf.get_f32_le();
17017        __struct.pitch = buf.get_f32_le();
17018        __struct.yaw = buf.get_f32_le();
17019        Ok(__struct)
17020    }
17021    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
17022        let mut __tmp = BytesMut::new(bytes);
17023        #[allow(clippy::absurd_extreme_comparisons)]
17024        #[allow(unused_comparisons)]
17025        if __tmp.remaining() < Self::ENCODED_LEN {
17026            panic!(
17027                "buffer is too small (need {} bytes, but got {})",
17028                Self::ENCODED_LEN,
17029                __tmp.remaining(),
17030            )
17031        }
17032        __tmp.put_u32_le(self.time_boot_ms);
17033        __tmp.put_f32_le(self.x);
17034        __tmp.put_f32_le(self.y);
17035        __tmp.put_f32_le(self.z);
17036        __tmp.put_f32_le(self.roll);
17037        __tmp.put_f32_le(self.pitch);
17038        __tmp.put_f32_le(self.yaw);
17039        if matches!(version, MavlinkVersion::V2) {
17040            let len = __tmp.len();
17041            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
17042        } else {
17043            __tmp.len()
17044        }
17045    }
17046}
17047#[doc = "id: 268"]
17048#[doc = "An ack for a LOGGING_DATA_ACKED message."]
17049#[derive(Debug, Clone, PartialEq)]
17050#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17051#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17052pub struct LOGGING_ACK_DATA {
17053    #[doc = "sequence number (must match the one in LOGGING_DATA_ACKED)"]
17054    pub sequence: u16,
17055    #[doc = "system ID of the target"]
17056    pub target_system: u8,
17057    #[doc = "component ID of the target"]
17058    pub target_component: u8,
17059}
17060impl LOGGING_ACK_DATA {
17061    pub const ENCODED_LEN: usize = 4usize;
17062    pub const DEFAULT: Self = Self {
17063        sequence: 0_u16,
17064        target_system: 0_u8,
17065        target_component: 0_u8,
17066    };
17067    #[cfg(feature = "arbitrary")]
17068    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
17069        use arbitrary::{Arbitrary, Unstructured};
17070        let mut buf = [0u8; 1024];
17071        rng.fill_bytes(&mut buf);
17072        let mut unstructured = Unstructured::new(&buf);
17073        Self::arbitrary(&mut unstructured).unwrap_or_default()
17074    }
17075}
17076impl Default for LOGGING_ACK_DATA {
17077    fn default() -> Self {
17078        Self::DEFAULT.clone()
17079    }
17080}
17081impl MessageData for LOGGING_ACK_DATA {
17082    type Message = MavMessage;
17083    const ID: u32 = 268u32;
17084    const NAME: &'static str = "LOGGING_ACK";
17085    const EXTRA_CRC: u8 = 14u8;
17086    const ENCODED_LEN: usize = 4usize;
17087    fn deser(
17088        _version: MavlinkVersion,
17089        __input: &[u8],
17090    ) -> Result<Self, ::mavlink_core::error::ParserError> {
17091        let avail_len = __input.len();
17092        let mut payload_buf = [0; Self::ENCODED_LEN];
17093        let mut buf = if avail_len < Self::ENCODED_LEN {
17094            payload_buf[0..avail_len].copy_from_slice(__input);
17095            Bytes::new(&payload_buf)
17096        } else {
17097            Bytes::new(__input)
17098        };
17099        let mut __struct = Self::default();
17100        __struct.sequence = buf.get_u16_le();
17101        __struct.target_system = buf.get_u8();
17102        __struct.target_component = buf.get_u8();
17103        Ok(__struct)
17104    }
17105    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
17106        let mut __tmp = BytesMut::new(bytes);
17107        #[allow(clippy::absurd_extreme_comparisons)]
17108        #[allow(unused_comparisons)]
17109        if __tmp.remaining() < Self::ENCODED_LEN {
17110            panic!(
17111                "buffer is too small (need {} bytes, but got {})",
17112                Self::ENCODED_LEN,
17113                __tmp.remaining(),
17114            )
17115        }
17116        __tmp.put_u16_le(self.sequence);
17117        __tmp.put_u8(self.target_system);
17118        __tmp.put_u8(self.target_component);
17119        if matches!(version, MavlinkVersion::V2) {
17120            let len = __tmp.len();
17121            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
17122        } else {
17123            __tmp.len()
17124        }
17125    }
17126}
17127#[doc = "id: 266"]
17128#[doc = "A message containing logged data (see also MAV_CMD_LOGGING_START)."]
17129#[derive(Debug, Clone, PartialEq)]
17130#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17131#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17132pub struct LOGGING_DATA_DATA {
17133    #[doc = "sequence number (can wrap)"]
17134    pub sequence: u16,
17135    #[doc = "system ID of the target"]
17136    pub target_system: u8,
17137    #[doc = "component ID of the target"]
17138    pub target_component: u8,
17139    #[doc = "data length"]
17140    pub length: u8,
17141    #[doc = "offset into data where first message starts. This can be used for recovery, when a previous message got lost (set to UINT8_MAX if no start exists)."]
17142    pub first_message_offset: u8,
17143    #[doc = "logged data"]
17144    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
17145    pub data: [u8; 249],
17146}
17147impl LOGGING_DATA_DATA {
17148    pub const ENCODED_LEN: usize = 255usize;
17149    pub const DEFAULT: Self = Self {
17150        sequence: 0_u16,
17151        target_system: 0_u8,
17152        target_component: 0_u8,
17153        length: 0_u8,
17154        first_message_offset: 0_u8,
17155        data: [0_u8; 249usize],
17156    };
17157    #[cfg(feature = "arbitrary")]
17158    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
17159        use arbitrary::{Arbitrary, Unstructured};
17160        let mut buf = [0u8; 1024];
17161        rng.fill_bytes(&mut buf);
17162        let mut unstructured = Unstructured::new(&buf);
17163        Self::arbitrary(&mut unstructured).unwrap_or_default()
17164    }
17165}
17166impl Default for LOGGING_DATA_DATA {
17167    fn default() -> Self {
17168        Self::DEFAULT.clone()
17169    }
17170}
17171impl MessageData for LOGGING_DATA_DATA {
17172    type Message = MavMessage;
17173    const ID: u32 = 266u32;
17174    const NAME: &'static str = "LOGGING_DATA";
17175    const EXTRA_CRC: u8 = 193u8;
17176    const ENCODED_LEN: usize = 255usize;
17177    fn deser(
17178        _version: MavlinkVersion,
17179        __input: &[u8],
17180    ) -> Result<Self, ::mavlink_core::error::ParserError> {
17181        let avail_len = __input.len();
17182        let mut payload_buf = [0; Self::ENCODED_LEN];
17183        let mut buf = if avail_len < Self::ENCODED_LEN {
17184            payload_buf[0..avail_len].copy_from_slice(__input);
17185            Bytes::new(&payload_buf)
17186        } else {
17187            Bytes::new(__input)
17188        };
17189        let mut __struct = Self::default();
17190        __struct.sequence = buf.get_u16_le();
17191        __struct.target_system = buf.get_u8();
17192        __struct.target_component = buf.get_u8();
17193        __struct.length = buf.get_u8();
17194        __struct.first_message_offset = buf.get_u8();
17195        for v in &mut __struct.data {
17196            let val = buf.get_u8();
17197            *v = val;
17198        }
17199        Ok(__struct)
17200    }
17201    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
17202        let mut __tmp = BytesMut::new(bytes);
17203        #[allow(clippy::absurd_extreme_comparisons)]
17204        #[allow(unused_comparisons)]
17205        if __tmp.remaining() < Self::ENCODED_LEN {
17206            panic!(
17207                "buffer is too small (need {} bytes, but got {})",
17208                Self::ENCODED_LEN,
17209                __tmp.remaining(),
17210            )
17211        }
17212        __tmp.put_u16_le(self.sequence);
17213        __tmp.put_u8(self.target_system);
17214        __tmp.put_u8(self.target_component);
17215        __tmp.put_u8(self.length);
17216        __tmp.put_u8(self.first_message_offset);
17217        for val in &self.data {
17218            __tmp.put_u8(*val);
17219        }
17220        if matches!(version, MavlinkVersion::V2) {
17221            let len = __tmp.len();
17222            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
17223        } else {
17224            __tmp.len()
17225        }
17226    }
17227}
17228#[doc = "id: 267"]
17229#[doc = "A message containing logged data which requires a LOGGING_ACK to be sent back."]
17230#[derive(Debug, Clone, PartialEq)]
17231#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17232#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17233pub struct LOGGING_DATA_ACKED_DATA {
17234    #[doc = "sequence number (can wrap)"]
17235    pub sequence: u16,
17236    #[doc = "system ID of the target"]
17237    pub target_system: u8,
17238    #[doc = "component ID of the target"]
17239    pub target_component: u8,
17240    #[doc = "data length"]
17241    pub length: u8,
17242    #[doc = "offset into data where first message starts. This can be used for recovery, when a previous message got lost (set to UINT8_MAX if no start exists)."]
17243    pub first_message_offset: u8,
17244    #[doc = "logged data"]
17245    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
17246    pub data: [u8; 249],
17247}
17248impl LOGGING_DATA_ACKED_DATA {
17249    pub const ENCODED_LEN: usize = 255usize;
17250    pub const DEFAULT: Self = Self {
17251        sequence: 0_u16,
17252        target_system: 0_u8,
17253        target_component: 0_u8,
17254        length: 0_u8,
17255        first_message_offset: 0_u8,
17256        data: [0_u8; 249usize],
17257    };
17258    #[cfg(feature = "arbitrary")]
17259    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
17260        use arbitrary::{Arbitrary, Unstructured};
17261        let mut buf = [0u8; 1024];
17262        rng.fill_bytes(&mut buf);
17263        let mut unstructured = Unstructured::new(&buf);
17264        Self::arbitrary(&mut unstructured).unwrap_or_default()
17265    }
17266}
17267impl Default for LOGGING_DATA_ACKED_DATA {
17268    fn default() -> Self {
17269        Self::DEFAULT.clone()
17270    }
17271}
17272impl MessageData for LOGGING_DATA_ACKED_DATA {
17273    type Message = MavMessage;
17274    const ID: u32 = 267u32;
17275    const NAME: &'static str = "LOGGING_DATA_ACKED";
17276    const EXTRA_CRC: u8 = 35u8;
17277    const ENCODED_LEN: usize = 255usize;
17278    fn deser(
17279        _version: MavlinkVersion,
17280        __input: &[u8],
17281    ) -> Result<Self, ::mavlink_core::error::ParserError> {
17282        let avail_len = __input.len();
17283        let mut payload_buf = [0; Self::ENCODED_LEN];
17284        let mut buf = if avail_len < Self::ENCODED_LEN {
17285            payload_buf[0..avail_len].copy_from_slice(__input);
17286            Bytes::new(&payload_buf)
17287        } else {
17288            Bytes::new(__input)
17289        };
17290        let mut __struct = Self::default();
17291        __struct.sequence = buf.get_u16_le();
17292        __struct.target_system = buf.get_u8();
17293        __struct.target_component = buf.get_u8();
17294        __struct.length = buf.get_u8();
17295        __struct.first_message_offset = buf.get_u8();
17296        for v in &mut __struct.data {
17297            let val = buf.get_u8();
17298            *v = val;
17299        }
17300        Ok(__struct)
17301    }
17302    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
17303        let mut __tmp = BytesMut::new(bytes);
17304        #[allow(clippy::absurd_extreme_comparisons)]
17305        #[allow(unused_comparisons)]
17306        if __tmp.remaining() < Self::ENCODED_LEN {
17307            panic!(
17308                "buffer is too small (need {} bytes, but got {})",
17309                Self::ENCODED_LEN,
17310                __tmp.remaining(),
17311            )
17312        }
17313        __tmp.put_u16_le(self.sequence);
17314        __tmp.put_u8(self.target_system);
17315        __tmp.put_u8(self.target_component);
17316        __tmp.put_u8(self.length);
17317        __tmp.put_u8(self.first_message_offset);
17318        for val in &self.data {
17319            __tmp.put_u8(*val);
17320        }
17321        if matches!(version, MavlinkVersion::V2) {
17322            let len = __tmp.len();
17323            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
17324        } else {
17325            __tmp.len()
17326        }
17327    }
17328}
17329#[doc = "id: 120"]
17330#[doc = "Reply to LOG_REQUEST_DATA."]
17331#[derive(Debug, Clone, PartialEq)]
17332#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17333#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17334pub struct LOG_DATA_DATA {
17335    #[doc = "Offset into the log"]
17336    pub ofs: u32,
17337    #[doc = "Log id (from LOG_ENTRY reply)"]
17338    pub id: u16,
17339    #[doc = "Number of bytes (zero for end of log)"]
17340    pub count: u8,
17341    #[doc = "log data"]
17342    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
17343    pub data: [u8; 90],
17344}
17345impl LOG_DATA_DATA {
17346    pub const ENCODED_LEN: usize = 97usize;
17347    pub const DEFAULT: Self = Self {
17348        ofs: 0_u32,
17349        id: 0_u16,
17350        count: 0_u8,
17351        data: [0_u8; 90usize],
17352    };
17353    #[cfg(feature = "arbitrary")]
17354    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
17355        use arbitrary::{Arbitrary, Unstructured};
17356        let mut buf = [0u8; 1024];
17357        rng.fill_bytes(&mut buf);
17358        let mut unstructured = Unstructured::new(&buf);
17359        Self::arbitrary(&mut unstructured).unwrap_or_default()
17360    }
17361}
17362impl Default for LOG_DATA_DATA {
17363    fn default() -> Self {
17364        Self::DEFAULT.clone()
17365    }
17366}
17367impl MessageData for LOG_DATA_DATA {
17368    type Message = MavMessage;
17369    const ID: u32 = 120u32;
17370    const NAME: &'static str = "LOG_DATA";
17371    const EXTRA_CRC: u8 = 134u8;
17372    const ENCODED_LEN: usize = 97usize;
17373    fn deser(
17374        _version: MavlinkVersion,
17375        __input: &[u8],
17376    ) -> Result<Self, ::mavlink_core::error::ParserError> {
17377        let avail_len = __input.len();
17378        let mut payload_buf = [0; Self::ENCODED_LEN];
17379        let mut buf = if avail_len < Self::ENCODED_LEN {
17380            payload_buf[0..avail_len].copy_from_slice(__input);
17381            Bytes::new(&payload_buf)
17382        } else {
17383            Bytes::new(__input)
17384        };
17385        let mut __struct = Self::default();
17386        __struct.ofs = buf.get_u32_le();
17387        __struct.id = buf.get_u16_le();
17388        __struct.count = buf.get_u8();
17389        for v in &mut __struct.data {
17390            let val = buf.get_u8();
17391            *v = val;
17392        }
17393        Ok(__struct)
17394    }
17395    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
17396        let mut __tmp = BytesMut::new(bytes);
17397        #[allow(clippy::absurd_extreme_comparisons)]
17398        #[allow(unused_comparisons)]
17399        if __tmp.remaining() < Self::ENCODED_LEN {
17400            panic!(
17401                "buffer is too small (need {} bytes, but got {})",
17402                Self::ENCODED_LEN,
17403                __tmp.remaining(),
17404            )
17405        }
17406        __tmp.put_u32_le(self.ofs);
17407        __tmp.put_u16_le(self.id);
17408        __tmp.put_u8(self.count);
17409        for val in &self.data {
17410            __tmp.put_u8(*val);
17411        }
17412        if matches!(version, MavlinkVersion::V2) {
17413            let len = __tmp.len();
17414            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
17415        } else {
17416            __tmp.len()
17417        }
17418    }
17419}
17420#[doc = "id: 118"]
17421#[doc = "Reply to LOG_REQUEST_LIST."]
17422#[derive(Debug, Clone, PartialEq)]
17423#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17424#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17425pub struct LOG_ENTRY_DATA {
17426    #[doc = "UTC timestamp of log since 1970, or 0 if not available"]
17427    pub time_utc: u32,
17428    #[doc = "Size of the log (may be approximate)"]
17429    pub size: u32,
17430    #[doc = "Log id"]
17431    pub id: u16,
17432    #[doc = "Total number of logs"]
17433    pub num_logs: u16,
17434    #[doc = "High log number"]
17435    pub last_log_num: u16,
17436}
17437impl LOG_ENTRY_DATA {
17438    pub const ENCODED_LEN: usize = 14usize;
17439    pub const DEFAULT: Self = Self {
17440        time_utc: 0_u32,
17441        size: 0_u32,
17442        id: 0_u16,
17443        num_logs: 0_u16,
17444        last_log_num: 0_u16,
17445    };
17446    #[cfg(feature = "arbitrary")]
17447    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
17448        use arbitrary::{Arbitrary, Unstructured};
17449        let mut buf = [0u8; 1024];
17450        rng.fill_bytes(&mut buf);
17451        let mut unstructured = Unstructured::new(&buf);
17452        Self::arbitrary(&mut unstructured).unwrap_or_default()
17453    }
17454}
17455impl Default for LOG_ENTRY_DATA {
17456    fn default() -> Self {
17457        Self::DEFAULT.clone()
17458    }
17459}
17460impl MessageData for LOG_ENTRY_DATA {
17461    type Message = MavMessage;
17462    const ID: u32 = 118u32;
17463    const NAME: &'static str = "LOG_ENTRY";
17464    const EXTRA_CRC: u8 = 56u8;
17465    const ENCODED_LEN: usize = 14usize;
17466    fn deser(
17467        _version: MavlinkVersion,
17468        __input: &[u8],
17469    ) -> Result<Self, ::mavlink_core::error::ParserError> {
17470        let avail_len = __input.len();
17471        let mut payload_buf = [0; Self::ENCODED_LEN];
17472        let mut buf = if avail_len < Self::ENCODED_LEN {
17473            payload_buf[0..avail_len].copy_from_slice(__input);
17474            Bytes::new(&payload_buf)
17475        } else {
17476            Bytes::new(__input)
17477        };
17478        let mut __struct = Self::default();
17479        __struct.time_utc = buf.get_u32_le();
17480        __struct.size = buf.get_u32_le();
17481        __struct.id = buf.get_u16_le();
17482        __struct.num_logs = buf.get_u16_le();
17483        __struct.last_log_num = buf.get_u16_le();
17484        Ok(__struct)
17485    }
17486    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
17487        let mut __tmp = BytesMut::new(bytes);
17488        #[allow(clippy::absurd_extreme_comparisons)]
17489        #[allow(unused_comparisons)]
17490        if __tmp.remaining() < Self::ENCODED_LEN {
17491            panic!(
17492                "buffer is too small (need {} bytes, but got {})",
17493                Self::ENCODED_LEN,
17494                __tmp.remaining(),
17495            )
17496        }
17497        __tmp.put_u32_le(self.time_utc);
17498        __tmp.put_u32_le(self.size);
17499        __tmp.put_u16_le(self.id);
17500        __tmp.put_u16_le(self.num_logs);
17501        __tmp.put_u16_le(self.last_log_num);
17502        if matches!(version, MavlinkVersion::V2) {
17503            let len = __tmp.len();
17504            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
17505        } else {
17506            __tmp.len()
17507        }
17508    }
17509}
17510#[doc = "id: 121"]
17511#[doc = "Erase all logs."]
17512#[derive(Debug, Clone, PartialEq)]
17513#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17514#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17515pub struct LOG_ERASE_DATA {
17516    #[doc = "System ID"]
17517    pub target_system: u8,
17518    #[doc = "Component ID"]
17519    pub target_component: u8,
17520}
17521impl LOG_ERASE_DATA {
17522    pub const ENCODED_LEN: usize = 2usize;
17523    pub const DEFAULT: Self = Self {
17524        target_system: 0_u8,
17525        target_component: 0_u8,
17526    };
17527    #[cfg(feature = "arbitrary")]
17528    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
17529        use arbitrary::{Arbitrary, Unstructured};
17530        let mut buf = [0u8; 1024];
17531        rng.fill_bytes(&mut buf);
17532        let mut unstructured = Unstructured::new(&buf);
17533        Self::arbitrary(&mut unstructured).unwrap_or_default()
17534    }
17535}
17536impl Default for LOG_ERASE_DATA {
17537    fn default() -> Self {
17538        Self::DEFAULT.clone()
17539    }
17540}
17541impl MessageData for LOG_ERASE_DATA {
17542    type Message = MavMessage;
17543    const ID: u32 = 121u32;
17544    const NAME: &'static str = "LOG_ERASE";
17545    const EXTRA_CRC: u8 = 237u8;
17546    const ENCODED_LEN: usize = 2usize;
17547    fn deser(
17548        _version: MavlinkVersion,
17549        __input: &[u8],
17550    ) -> Result<Self, ::mavlink_core::error::ParserError> {
17551        let avail_len = __input.len();
17552        let mut payload_buf = [0; Self::ENCODED_LEN];
17553        let mut buf = if avail_len < Self::ENCODED_LEN {
17554            payload_buf[0..avail_len].copy_from_slice(__input);
17555            Bytes::new(&payload_buf)
17556        } else {
17557            Bytes::new(__input)
17558        };
17559        let mut __struct = Self::default();
17560        __struct.target_system = buf.get_u8();
17561        __struct.target_component = buf.get_u8();
17562        Ok(__struct)
17563    }
17564    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
17565        let mut __tmp = BytesMut::new(bytes);
17566        #[allow(clippy::absurd_extreme_comparisons)]
17567        #[allow(unused_comparisons)]
17568        if __tmp.remaining() < Self::ENCODED_LEN {
17569            panic!(
17570                "buffer is too small (need {} bytes, but got {})",
17571                Self::ENCODED_LEN,
17572                __tmp.remaining(),
17573            )
17574        }
17575        __tmp.put_u8(self.target_system);
17576        __tmp.put_u8(self.target_component);
17577        if matches!(version, MavlinkVersion::V2) {
17578            let len = __tmp.len();
17579            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
17580        } else {
17581            __tmp.len()
17582        }
17583    }
17584}
17585#[doc = "id: 119"]
17586#[doc = "Request a chunk of a log."]
17587#[derive(Debug, Clone, PartialEq)]
17588#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17589#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17590pub struct LOG_REQUEST_DATA_DATA {
17591    #[doc = "Offset into the log"]
17592    pub ofs: u32,
17593    #[doc = "Number of bytes"]
17594    pub count: u32,
17595    #[doc = "Log id (from LOG_ENTRY reply)"]
17596    pub id: u16,
17597    #[doc = "System ID"]
17598    pub target_system: u8,
17599    #[doc = "Component ID"]
17600    pub target_component: u8,
17601}
17602impl LOG_REQUEST_DATA_DATA {
17603    pub const ENCODED_LEN: usize = 12usize;
17604    pub const DEFAULT: Self = Self {
17605        ofs: 0_u32,
17606        count: 0_u32,
17607        id: 0_u16,
17608        target_system: 0_u8,
17609        target_component: 0_u8,
17610    };
17611    #[cfg(feature = "arbitrary")]
17612    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
17613        use arbitrary::{Arbitrary, Unstructured};
17614        let mut buf = [0u8; 1024];
17615        rng.fill_bytes(&mut buf);
17616        let mut unstructured = Unstructured::new(&buf);
17617        Self::arbitrary(&mut unstructured).unwrap_or_default()
17618    }
17619}
17620impl Default for LOG_REQUEST_DATA_DATA {
17621    fn default() -> Self {
17622        Self::DEFAULT.clone()
17623    }
17624}
17625impl MessageData for LOG_REQUEST_DATA_DATA {
17626    type Message = MavMessage;
17627    const ID: u32 = 119u32;
17628    const NAME: &'static str = "LOG_REQUEST_DATA";
17629    const EXTRA_CRC: u8 = 116u8;
17630    const ENCODED_LEN: usize = 12usize;
17631    fn deser(
17632        _version: MavlinkVersion,
17633        __input: &[u8],
17634    ) -> Result<Self, ::mavlink_core::error::ParserError> {
17635        let avail_len = __input.len();
17636        let mut payload_buf = [0; Self::ENCODED_LEN];
17637        let mut buf = if avail_len < Self::ENCODED_LEN {
17638            payload_buf[0..avail_len].copy_from_slice(__input);
17639            Bytes::new(&payload_buf)
17640        } else {
17641            Bytes::new(__input)
17642        };
17643        let mut __struct = Self::default();
17644        __struct.ofs = buf.get_u32_le();
17645        __struct.count = buf.get_u32_le();
17646        __struct.id = buf.get_u16_le();
17647        __struct.target_system = buf.get_u8();
17648        __struct.target_component = buf.get_u8();
17649        Ok(__struct)
17650    }
17651    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
17652        let mut __tmp = BytesMut::new(bytes);
17653        #[allow(clippy::absurd_extreme_comparisons)]
17654        #[allow(unused_comparisons)]
17655        if __tmp.remaining() < Self::ENCODED_LEN {
17656            panic!(
17657                "buffer is too small (need {} bytes, but got {})",
17658                Self::ENCODED_LEN,
17659                __tmp.remaining(),
17660            )
17661        }
17662        __tmp.put_u32_le(self.ofs);
17663        __tmp.put_u32_le(self.count);
17664        __tmp.put_u16_le(self.id);
17665        __tmp.put_u8(self.target_system);
17666        __tmp.put_u8(self.target_component);
17667        if matches!(version, MavlinkVersion::V2) {
17668            let len = __tmp.len();
17669            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
17670        } else {
17671            __tmp.len()
17672        }
17673    }
17674}
17675#[doc = "id: 122"]
17676#[doc = "Stop log transfer and resume normal logging."]
17677#[derive(Debug, Clone, PartialEq)]
17678#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17679#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17680pub struct LOG_REQUEST_END_DATA {
17681    #[doc = "System ID"]
17682    pub target_system: u8,
17683    #[doc = "Component ID"]
17684    pub target_component: u8,
17685}
17686impl LOG_REQUEST_END_DATA {
17687    pub const ENCODED_LEN: usize = 2usize;
17688    pub const DEFAULT: Self = Self {
17689        target_system: 0_u8,
17690        target_component: 0_u8,
17691    };
17692    #[cfg(feature = "arbitrary")]
17693    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
17694        use arbitrary::{Arbitrary, Unstructured};
17695        let mut buf = [0u8; 1024];
17696        rng.fill_bytes(&mut buf);
17697        let mut unstructured = Unstructured::new(&buf);
17698        Self::arbitrary(&mut unstructured).unwrap_or_default()
17699    }
17700}
17701impl Default for LOG_REQUEST_END_DATA {
17702    fn default() -> Self {
17703        Self::DEFAULT.clone()
17704    }
17705}
17706impl MessageData for LOG_REQUEST_END_DATA {
17707    type Message = MavMessage;
17708    const ID: u32 = 122u32;
17709    const NAME: &'static str = "LOG_REQUEST_END";
17710    const EXTRA_CRC: u8 = 203u8;
17711    const ENCODED_LEN: usize = 2usize;
17712    fn deser(
17713        _version: MavlinkVersion,
17714        __input: &[u8],
17715    ) -> Result<Self, ::mavlink_core::error::ParserError> {
17716        let avail_len = __input.len();
17717        let mut payload_buf = [0; Self::ENCODED_LEN];
17718        let mut buf = if avail_len < Self::ENCODED_LEN {
17719            payload_buf[0..avail_len].copy_from_slice(__input);
17720            Bytes::new(&payload_buf)
17721        } else {
17722            Bytes::new(__input)
17723        };
17724        let mut __struct = Self::default();
17725        __struct.target_system = buf.get_u8();
17726        __struct.target_component = buf.get_u8();
17727        Ok(__struct)
17728    }
17729    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
17730        let mut __tmp = BytesMut::new(bytes);
17731        #[allow(clippy::absurd_extreme_comparisons)]
17732        #[allow(unused_comparisons)]
17733        if __tmp.remaining() < Self::ENCODED_LEN {
17734            panic!(
17735                "buffer is too small (need {} bytes, but got {})",
17736                Self::ENCODED_LEN,
17737                __tmp.remaining(),
17738            )
17739        }
17740        __tmp.put_u8(self.target_system);
17741        __tmp.put_u8(self.target_component);
17742        if matches!(version, MavlinkVersion::V2) {
17743            let len = __tmp.len();
17744            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
17745        } else {
17746            __tmp.len()
17747        }
17748    }
17749}
17750#[doc = "id: 117"]
17751#[doc = "Request a list of available logs. On some systems calling this may stop on-board logging until LOG_REQUEST_END is called. If there are no log files available this request shall be answered with one LOG_ENTRY message with id = 0 and num_logs = 0."]
17752#[derive(Debug, Clone, PartialEq)]
17753#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17754#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17755pub struct LOG_REQUEST_LIST_DATA {
17756    #[doc = "First log id (0 for first available)"]
17757    pub start: u16,
17758    #[doc = "Last log id (0xffff for last available)"]
17759    pub end: u16,
17760    #[doc = "System ID"]
17761    pub target_system: u8,
17762    #[doc = "Component ID"]
17763    pub target_component: u8,
17764}
17765impl LOG_REQUEST_LIST_DATA {
17766    pub const ENCODED_LEN: usize = 6usize;
17767    pub const DEFAULT: Self = Self {
17768        start: 0_u16,
17769        end: 0_u16,
17770        target_system: 0_u8,
17771        target_component: 0_u8,
17772    };
17773    #[cfg(feature = "arbitrary")]
17774    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
17775        use arbitrary::{Arbitrary, Unstructured};
17776        let mut buf = [0u8; 1024];
17777        rng.fill_bytes(&mut buf);
17778        let mut unstructured = Unstructured::new(&buf);
17779        Self::arbitrary(&mut unstructured).unwrap_or_default()
17780    }
17781}
17782impl Default for LOG_REQUEST_LIST_DATA {
17783    fn default() -> Self {
17784        Self::DEFAULT.clone()
17785    }
17786}
17787impl MessageData for LOG_REQUEST_LIST_DATA {
17788    type Message = MavMessage;
17789    const ID: u32 = 117u32;
17790    const NAME: &'static str = "LOG_REQUEST_LIST";
17791    const EXTRA_CRC: u8 = 128u8;
17792    const ENCODED_LEN: usize = 6usize;
17793    fn deser(
17794        _version: MavlinkVersion,
17795        __input: &[u8],
17796    ) -> Result<Self, ::mavlink_core::error::ParserError> {
17797        let avail_len = __input.len();
17798        let mut payload_buf = [0; Self::ENCODED_LEN];
17799        let mut buf = if avail_len < Self::ENCODED_LEN {
17800            payload_buf[0..avail_len].copy_from_slice(__input);
17801            Bytes::new(&payload_buf)
17802        } else {
17803            Bytes::new(__input)
17804        };
17805        let mut __struct = Self::default();
17806        __struct.start = buf.get_u16_le();
17807        __struct.end = buf.get_u16_le();
17808        __struct.target_system = buf.get_u8();
17809        __struct.target_component = buf.get_u8();
17810        Ok(__struct)
17811    }
17812    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
17813        let mut __tmp = BytesMut::new(bytes);
17814        #[allow(clippy::absurd_extreme_comparisons)]
17815        #[allow(unused_comparisons)]
17816        if __tmp.remaining() < Self::ENCODED_LEN {
17817            panic!(
17818                "buffer is too small (need {} bytes, but got {})",
17819                Self::ENCODED_LEN,
17820                __tmp.remaining(),
17821            )
17822        }
17823        __tmp.put_u16_le(self.start);
17824        __tmp.put_u16_le(self.end);
17825        __tmp.put_u8(self.target_system);
17826        __tmp.put_u8(self.target_component);
17827        if matches!(version, MavlinkVersion::V2) {
17828            let len = __tmp.len();
17829            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
17830        } else {
17831            __tmp.len()
17832        }
17833    }
17834}
17835#[doc = "id: 192"]
17836#[doc = "Reports results of completed compass calibration. Sent until MAG_CAL_ACK received."]
17837#[derive(Debug, Clone, PartialEq)]
17838#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17839#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17840pub struct MAG_CAL_REPORT_DATA {
17841    #[doc = "RMS milligauss residuals."]
17842    pub fitness: f32,
17843    #[doc = "X offset."]
17844    pub ofs_x: f32,
17845    #[doc = "Y offset."]
17846    pub ofs_y: f32,
17847    #[doc = "Z offset."]
17848    pub ofs_z: f32,
17849    #[doc = "X diagonal (matrix 11)."]
17850    pub diag_x: f32,
17851    #[doc = "Y diagonal (matrix 22)."]
17852    pub diag_y: f32,
17853    #[doc = "Z diagonal (matrix 33)."]
17854    pub diag_z: f32,
17855    #[doc = "X off-diagonal (matrix 12 and 21)."]
17856    pub offdiag_x: f32,
17857    #[doc = "Y off-diagonal (matrix 13 and 31)."]
17858    pub offdiag_y: f32,
17859    #[doc = "Z off-diagonal (matrix 32 and 23)."]
17860    pub offdiag_z: f32,
17861    #[doc = "Compass being calibrated."]
17862    pub compass_id: u8,
17863    #[doc = "Bitmask of compasses being calibrated."]
17864    pub cal_mask: u8,
17865    #[doc = "Calibration Status."]
17866    pub cal_status: MagCalStatus,
17867    #[doc = "0=requires a MAV_CMD_DO_ACCEPT_MAG_CAL, 1=saved to parameters."]
17868    pub autosaved: u8,
17869    #[doc = "Confidence in orientation (higher is better)."]
17870    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
17871    pub orientation_confidence: f32,
17872    #[doc = "orientation before calibration."]
17873    #[cfg_attr(feature = "serde", serde(default))]
17874    pub old_orientation: MavSensorOrientation,
17875    #[doc = "orientation after calibration."]
17876    #[cfg_attr(feature = "serde", serde(default))]
17877    pub new_orientation: MavSensorOrientation,
17878    #[doc = "field radius correction factor"]
17879    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
17880    pub scale_factor: f32,
17881}
17882impl MAG_CAL_REPORT_DATA {
17883    pub const ENCODED_LEN: usize = 54usize;
17884    pub const DEFAULT: Self = Self {
17885        fitness: 0.0_f32,
17886        ofs_x: 0.0_f32,
17887        ofs_y: 0.0_f32,
17888        ofs_z: 0.0_f32,
17889        diag_x: 0.0_f32,
17890        diag_y: 0.0_f32,
17891        diag_z: 0.0_f32,
17892        offdiag_x: 0.0_f32,
17893        offdiag_y: 0.0_f32,
17894        offdiag_z: 0.0_f32,
17895        compass_id: 0_u8,
17896        cal_mask: 0_u8,
17897        cal_status: MagCalStatus::DEFAULT,
17898        autosaved: 0_u8,
17899        orientation_confidence: 0.0_f32,
17900        old_orientation: MavSensorOrientation::DEFAULT,
17901        new_orientation: MavSensorOrientation::DEFAULT,
17902        scale_factor: 0.0_f32,
17903    };
17904    #[cfg(feature = "arbitrary")]
17905    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
17906        use arbitrary::{Arbitrary, Unstructured};
17907        let mut buf = [0u8; 1024];
17908        rng.fill_bytes(&mut buf);
17909        let mut unstructured = Unstructured::new(&buf);
17910        Self::arbitrary(&mut unstructured).unwrap_or_default()
17911    }
17912}
17913impl Default for MAG_CAL_REPORT_DATA {
17914    fn default() -> Self {
17915        Self::DEFAULT.clone()
17916    }
17917}
17918impl MessageData for MAG_CAL_REPORT_DATA {
17919    type Message = MavMessage;
17920    const ID: u32 = 192u32;
17921    const NAME: &'static str = "MAG_CAL_REPORT";
17922    const EXTRA_CRC: u8 = 36u8;
17923    const ENCODED_LEN: usize = 54usize;
17924    fn deser(
17925        _version: MavlinkVersion,
17926        __input: &[u8],
17927    ) -> Result<Self, ::mavlink_core::error::ParserError> {
17928        let avail_len = __input.len();
17929        let mut payload_buf = [0; Self::ENCODED_LEN];
17930        let mut buf = if avail_len < Self::ENCODED_LEN {
17931            payload_buf[0..avail_len].copy_from_slice(__input);
17932            Bytes::new(&payload_buf)
17933        } else {
17934            Bytes::new(__input)
17935        };
17936        let mut __struct = Self::default();
17937        __struct.fitness = buf.get_f32_le();
17938        __struct.ofs_x = buf.get_f32_le();
17939        __struct.ofs_y = buf.get_f32_le();
17940        __struct.ofs_z = buf.get_f32_le();
17941        __struct.diag_x = buf.get_f32_le();
17942        __struct.diag_y = buf.get_f32_le();
17943        __struct.diag_z = buf.get_f32_le();
17944        __struct.offdiag_x = buf.get_f32_le();
17945        __struct.offdiag_y = buf.get_f32_le();
17946        __struct.offdiag_z = buf.get_f32_le();
17947        __struct.compass_id = buf.get_u8();
17948        __struct.cal_mask = buf.get_u8();
17949        let tmp = buf.get_u8();
17950        __struct.cal_status =
17951            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
17952                enum_type: "MagCalStatus",
17953                value: tmp as u32,
17954            })?;
17955        __struct.autosaved = buf.get_u8();
17956        __struct.orientation_confidence = buf.get_f32_le();
17957        let tmp = buf.get_u8();
17958        __struct.old_orientation =
17959            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
17960                enum_type: "MavSensorOrientation",
17961                value: tmp as u32,
17962            })?;
17963        let tmp = buf.get_u8();
17964        __struct.new_orientation =
17965            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
17966                enum_type: "MavSensorOrientation",
17967                value: tmp as u32,
17968            })?;
17969        __struct.scale_factor = buf.get_f32_le();
17970        Ok(__struct)
17971    }
17972    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
17973        let mut __tmp = BytesMut::new(bytes);
17974        #[allow(clippy::absurd_extreme_comparisons)]
17975        #[allow(unused_comparisons)]
17976        if __tmp.remaining() < Self::ENCODED_LEN {
17977            panic!(
17978                "buffer is too small (need {} bytes, but got {})",
17979                Self::ENCODED_LEN,
17980                __tmp.remaining(),
17981            )
17982        }
17983        __tmp.put_f32_le(self.fitness);
17984        __tmp.put_f32_le(self.ofs_x);
17985        __tmp.put_f32_le(self.ofs_y);
17986        __tmp.put_f32_le(self.ofs_z);
17987        __tmp.put_f32_le(self.diag_x);
17988        __tmp.put_f32_le(self.diag_y);
17989        __tmp.put_f32_le(self.diag_z);
17990        __tmp.put_f32_le(self.offdiag_x);
17991        __tmp.put_f32_le(self.offdiag_y);
17992        __tmp.put_f32_le(self.offdiag_z);
17993        __tmp.put_u8(self.compass_id);
17994        __tmp.put_u8(self.cal_mask);
17995        __tmp.put_u8(self.cal_status as u8);
17996        __tmp.put_u8(self.autosaved);
17997        __tmp.put_f32_le(self.orientation_confidence);
17998        __tmp.put_u8(self.old_orientation as u8);
17999        __tmp.put_u8(self.new_orientation as u8);
18000        __tmp.put_f32_le(self.scale_factor);
18001        if matches!(version, MavlinkVersion::V2) {
18002            let len = __tmp.len();
18003            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
18004        } else {
18005            __tmp.len()
18006        }
18007    }
18008}
18009#[doc = "id: 69"]
18010#[doc = "This message provides an API for manually controlling the vehicle using standard joystick axes nomenclature, along with a joystick-like input device. Unused axes can be disabled and buttons states are transmitted as individual on/off bits of a bitmask."]
18011#[derive(Debug, Clone, PartialEq)]
18012#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18013#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18014pub struct MANUAL_CONTROL_DATA {
18015    #[doc = "X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle."]
18016    pub x: i16,
18017    #[doc = "Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle."]
18018    pub y: i16,
18019    #[doc = "Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust."]
18020    pub z: i16,
18021    #[doc = "R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle."]
18022    pub r: i16,
18023    #[doc = "A bitfield corresponding to the joystick buttons' 0-15 current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1."]
18024    pub buttons: u16,
18025    #[doc = "The system to be controlled."]
18026    pub target: u8,
18027    #[doc = "A bitfield corresponding to the joystick buttons' 16-31 current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 16."]
18028    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18029    pub buttons2: u16,
18030    #[doc = "Set bits to 1 to indicate which of the following extension fields contain valid data: bit 0: pitch, bit 1: roll, bit 2: aux1, bit 3: aux2, bit 4: aux3, bit 5: aux4, bit 6: aux5, bit 7: aux6"]
18031    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18032    pub enabled_extensions: u8,
18033    #[doc = "Pitch-only-axis, normalized to the range [-1000,1000]. Generally corresponds to pitch on vehicles with additional degrees of freedom. Valid if bit 0 of enabled_extensions field is set. Set to 0 if invalid."]
18034    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18035    pub s: i16,
18036    #[doc = "Roll-only-axis, normalized to the range [-1000,1000]. Generally corresponds to roll on vehicles with additional degrees of freedom. Valid if bit 1 of enabled_extensions field is set. Set to 0 if invalid."]
18037    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18038    pub t: i16,
18039    #[doc = "Aux continuous input field 1. Normalized in the range [-1000,1000]. Purpose defined by recipient. Valid data if bit 2 of enabled_extensions field is set. 0 if bit 2 is unset."]
18040    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18041    pub aux1: i16,
18042    #[doc = "Aux continuous input field 2. Normalized in the range [-1000,1000]. Purpose defined by recipient. Valid data if bit 3 of enabled_extensions field is set. 0 if bit 3 is unset."]
18043    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18044    pub aux2: i16,
18045    #[doc = "Aux continuous input field 3. Normalized in the range [-1000,1000]. Purpose defined by recipient. Valid data if bit 4 of enabled_extensions field is set. 0 if bit 4 is unset."]
18046    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18047    pub aux3: i16,
18048    #[doc = "Aux continuous input field 4. Normalized in the range [-1000,1000]. Purpose defined by recipient. Valid data if bit 5 of enabled_extensions field is set. 0 if bit 5 is unset."]
18049    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18050    pub aux4: i16,
18051    #[doc = "Aux continuous input field 5. Normalized in the range [-1000,1000]. Purpose defined by recipient. Valid data if bit 6 of enabled_extensions field is set. 0 if bit 6 is unset."]
18052    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18053    pub aux5: i16,
18054    #[doc = "Aux continuous input field 6. Normalized in the range [-1000,1000]. Purpose defined by recipient. Valid data if bit 7 of enabled_extensions field is set. 0 if bit 7 is unset."]
18055    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18056    pub aux6: i16,
18057}
18058impl MANUAL_CONTROL_DATA {
18059    pub const ENCODED_LEN: usize = 30usize;
18060    pub const DEFAULT: Self = Self {
18061        x: 0_i16,
18062        y: 0_i16,
18063        z: 0_i16,
18064        r: 0_i16,
18065        buttons: 0_u16,
18066        target: 0_u8,
18067        buttons2: 0_u16,
18068        enabled_extensions: 0_u8,
18069        s: 0_i16,
18070        t: 0_i16,
18071        aux1: 0_i16,
18072        aux2: 0_i16,
18073        aux3: 0_i16,
18074        aux4: 0_i16,
18075        aux5: 0_i16,
18076        aux6: 0_i16,
18077    };
18078    #[cfg(feature = "arbitrary")]
18079    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
18080        use arbitrary::{Arbitrary, Unstructured};
18081        let mut buf = [0u8; 1024];
18082        rng.fill_bytes(&mut buf);
18083        let mut unstructured = Unstructured::new(&buf);
18084        Self::arbitrary(&mut unstructured).unwrap_or_default()
18085    }
18086}
18087impl Default for MANUAL_CONTROL_DATA {
18088    fn default() -> Self {
18089        Self::DEFAULT.clone()
18090    }
18091}
18092impl MessageData for MANUAL_CONTROL_DATA {
18093    type Message = MavMessage;
18094    const ID: u32 = 69u32;
18095    const NAME: &'static str = "MANUAL_CONTROL";
18096    const EXTRA_CRC: u8 = 243u8;
18097    const ENCODED_LEN: usize = 30usize;
18098    fn deser(
18099        _version: MavlinkVersion,
18100        __input: &[u8],
18101    ) -> Result<Self, ::mavlink_core::error::ParserError> {
18102        let avail_len = __input.len();
18103        let mut payload_buf = [0; Self::ENCODED_LEN];
18104        let mut buf = if avail_len < Self::ENCODED_LEN {
18105            payload_buf[0..avail_len].copy_from_slice(__input);
18106            Bytes::new(&payload_buf)
18107        } else {
18108            Bytes::new(__input)
18109        };
18110        let mut __struct = Self::default();
18111        __struct.x = buf.get_i16_le();
18112        __struct.y = buf.get_i16_le();
18113        __struct.z = buf.get_i16_le();
18114        __struct.r = buf.get_i16_le();
18115        __struct.buttons = buf.get_u16_le();
18116        __struct.target = buf.get_u8();
18117        __struct.buttons2 = buf.get_u16_le();
18118        __struct.enabled_extensions = buf.get_u8();
18119        __struct.s = buf.get_i16_le();
18120        __struct.t = buf.get_i16_le();
18121        __struct.aux1 = buf.get_i16_le();
18122        __struct.aux2 = buf.get_i16_le();
18123        __struct.aux3 = buf.get_i16_le();
18124        __struct.aux4 = buf.get_i16_le();
18125        __struct.aux5 = buf.get_i16_le();
18126        __struct.aux6 = buf.get_i16_le();
18127        Ok(__struct)
18128    }
18129    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
18130        let mut __tmp = BytesMut::new(bytes);
18131        #[allow(clippy::absurd_extreme_comparisons)]
18132        #[allow(unused_comparisons)]
18133        if __tmp.remaining() < Self::ENCODED_LEN {
18134            panic!(
18135                "buffer is too small (need {} bytes, but got {})",
18136                Self::ENCODED_LEN,
18137                __tmp.remaining(),
18138            )
18139        }
18140        __tmp.put_i16_le(self.x);
18141        __tmp.put_i16_le(self.y);
18142        __tmp.put_i16_le(self.z);
18143        __tmp.put_i16_le(self.r);
18144        __tmp.put_u16_le(self.buttons);
18145        __tmp.put_u8(self.target);
18146        __tmp.put_u16_le(self.buttons2);
18147        __tmp.put_u8(self.enabled_extensions);
18148        __tmp.put_i16_le(self.s);
18149        __tmp.put_i16_le(self.t);
18150        __tmp.put_i16_le(self.aux1);
18151        __tmp.put_i16_le(self.aux2);
18152        __tmp.put_i16_le(self.aux3);
18153        __tmp.put_i16_le(self.aux4);
18154        __tmp.put_i16_le(self.aux5);
18155        __tmp.put_i16_le(self.aux6);
18156        if matches!(version, MavlinkVersion::V2) {
18157            let len = __tmp.len();
18158            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
18159        } else {
18160            __tmp.len()
18161        }
18162    }
18163}
18164#[doc = "id: 81"]
18165#[doc = "Setpoint in roll, pitch, yaw and thrust from the operator."]
18166#[derive(Debug, Clone, PartialEq)]
18167#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18168#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18169pub struct MANUAL_SETPOINT_DATA {
18170    #[doc = "Timestamp (time since system boot)."]
18171    pub time_boot_ms: u32,
18172    #[doc = "Desired roll rate"]
18173    pub roll: f32,
18174    #[doc = "Desired pitch rate"]
18175    pub pitch: f32,
18176    #[doc = "Desired yaw rate"]
18177    pub yaw: f32,
18178    #[doc = "Collective thrust, normalized to 0 .. 1"]
18179    pub thrust: f32,
18180    #[doc = "Flight mode switch position, 0.. 255"]
18181    pub mode_switch: u8,
18182    #[doc = "Override mode switch position, 0.. 255"]
18183    pub manual_override_switch: u8,
18184}
18185impl MANUAL_SETPOINT_DATA {
18186    pub const ENCODED_LEN: usize = 22usize;
18187    pub const DEFAULT: Self = Self {
18188        time_boot_ms: 0_u32,
18189        roll: 0.0_f32,
18190        pitch: 0.0_f32,
18191        yaw: 0.0_f32,
18192        thrust: 0.0_f32,
18193        mode_switch: 0_u8,
18194        manual_override_switch: 0_u8,
18195    };
18196    #[cfg(feature = "arbitrary")]
18197    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
18198        use arbitrary::{Arbitrary, Unstructured};
18199        let mut buf = [0u8; 1024];
18200        rng.fill_bytes(&mut buf);
18201        let mut unstructured = Unstructured::new(&buf);
18202        Self::arbitrary(&mut unstructured).unwrap_or_default()
18203    }
18204}
18205impl Default for MANUAL_SETPOINT_DATA {
18206    fn default() -> Self {
18207        Self::DEFAULT.clone()
18208    }
18209}
18210impl MessageData for MANUAL_SETPOINT_DATA {
18211    type Message = MavMessage;
18212    const ID: u32 = 81u32;
18213    const NAME: &'static str = "MANUAL_SETPOINT";
18214    const EXTRA_CRC: u8 = 106u8;
18215    const ENCODED_LEN: usize = 22usize;
18216    fn deser(
18217        _version: MavlinkVersion,
18218        __input: &[u8],
18219    ) -> Result<Self, ::mavlink_core::error::ParserError> {
18220        let avail_len = __input.len();
18221        let mut payload_buf = [0; Self::ENCODED_LEN];
18222        let mut buf = if avail_len < Self::ENCODED_LEN {
18223            payload_buf[0..avail_len].copy_from_slice(__input);
18224            Bytes::new(&payload_buf)
18225        } else {
18226            Bytes::new(__input)
18227        };
18228        let mut __struct = Self::default();
18229        __struct.time_boot_ms = buf.get_u32_le();
18230        __struct.roll = buf.get_f32_le();
18231        __struct.pitch = buf.get_f32_le();
18232        __struct.yaw = buf.get_f32_le();
18233        __struct.thrust = buf.get_f32_le();
18234        __struct.mode_switch = buf.get_u8();
18235        __struct.manual_override_switch = buf.get_u8();
18236        Ok(__struct)
18237    }
18238    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
18239        let mut __tmp = BytesMut::new(bytes);
18240        #[allow(clippy::absurd_extreme_comparisons)]
18241        #[allow(unused_comparisons)]
18242        if __tmp.remaining() < Self::ENCODED_LEN {
18243            panic!(
18244                "buffer is too small (need {} bytes, but got {})",
18245                Self::ENCODED_LEN,
18246                __tmp.remaining(),
18247            )
18248        }
18249        __tmp.put_u32_le(self.time_boot_ms);
18250        __tmp.put_f32_le(self.roll);
18251        __tmp.put_f32_le(self.pitch);
18252        __tmp.put_f32_le(self.yaw);
18253        __tmp.put_f32_le(self.thrust);
18254        __tmp.put_u8(self.mode_switch);
18255        __tmp.put_u8(self.manual_override_switch);
18256        if matches!(version, MavlinkVersion::V2) {
18257            let len = __tmp.len();
18258            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
18259        } else {
18260            __tmp.len()
18261        }
18262    }
18263}
18264#[doc = "id: 249"]
18265#[doc = "Send raw controller memory. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output."]
18266#[derive(Debug, Clone, PartialEq)]
18267#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18268#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18269pub struct MEMORY_VECT_DATA {
18270    #[doc = "Starting address of the debug variables"]
18271    pub address: u16,
18272    #[doc = "Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below"]
18273    pub ver: u8,
18274    #[doc = "Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14"]
18275    pub mavtype: u8,
18276    #[doc = "Memory contents at specified address"]
18277    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
18278    pub value: [i8; 32],
18279}
18280impl MEMORY_VECT_DATA {
18281    pub const ENCODED_LEN: usize = 36usize;
18282    pub const DEFAULT: Self = Self {
18283        address: 0_u16,
18284        ver: 0_u8,
18285        mavtype: 0_u8,
18286        value: [0_i8; 32usize],
18287    };
18288    #[cfg(feature = "arbitrary")]
18289    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
18290        use arbitrary::{Arbitrary, Unstructured};
18291        let mut buf = [0u8; 1024];
18292        rng.fill_bytes(&mut buf);
18293        let mut unstructured = Unstructured::new(&buf);
18294        Self::arbitrary(&mut unstructured).unwrap_or_default()
18295    }
18296}
18297impl Default for MEMORY_VECT_DATA {
18298    fn default() -> Self {
18299        Self::DEFAULT.clone()
18300    }
18301}
18302impl MessageData for MEMORY_VECT_DATA {
18303    type Message = MavMessage;
18304    const ID: u32 = 249u32;
18305    const NAME: &'static str = "MEMORY_VECT";
18306    const EXTRA_CRC: u8 = 204u8;
18307    const ENCODED_LEN: usize = 36usize;
18308    fn deser(
18309        _version: MavlinkVersion,
18310        __input: &[u8],
18311    ) -> Result<Self, ::mavlink_core::error::ParserError> {
18312        let avail_len = __input.len();
18313        let mut payload_buf = [0; Self::ENCODED_LEN];
18314        let mut buf = if avail_len < Self::ENCODED_LEN {
18315            payload_buf[0..avail_len].copy_from_slice(__input);
18316            Bytes::new(&payload_buf)
18317        } else {
18318            Bytes::new(__input)
18319        };
18320        let mut __struct = Self::default();
18321        __struct.address = buf.get_u16_le();
18322        __struct.ver = buf.get_u8();
18323        __struct.mavtype = buf.get_u8();
18324        for v in &mut __struct.value {
18325            let val = buf.get_i8();
18326            *v = val;
18327        }
18328        Ok(__struct)
18329    }
18330    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
18331        let mut __tmp = BytesMut::new(bytes);
18332        #[allow(clippy::absurd_extreme_comparisons)]
18333        #[allow(unused_comparisons)]
18334        if __tmp.remaining() < Self::ENCODED_LEN {
18335            panic!(
18336                "buffer is too small (need {} bytes, but got {})",
18337                Self::ENCODED_LEN,
18338                __tmp.remaining(),
18339            )
18340        }
18341        __tmp.put_u16_le(self.address);
18342        __tmp.put_u8(self.ver);
18343        __tmp.put_u8(self.mavtype);
18344        for val in &self.value {
18345            __tmp.put_i8(*val);
18346        }
18347        if matches!(version, MavlinkVersion::V2) {
18348            let len = __tmp.len();
18349            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
18350        } else {
18351            __tmp.len()
18352        }
18353    }
18354}
18355#[doc = "id: 244"]
18356#[doc = "The interval between messages for a particular MAVLink message ID.         This message is sent in response to the MAV_CMD_REQUEST_MESSAGE command with param1=244 (this message) and param2=message_id (the id of the message for which the interval is required). \tIt may also be sent in response to MAV_CMD_GET_MESSAGE_INTERVAL. \tThis interface replaces DATA_STREAM."]
18357#[derive(Debug, Clone, PartialEq)]
18358#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18359#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18360pub struct MESSAGE_INTERVAL_DATA {
18361    #[doc = "0 indicates the interval at which it is sent."]
18362    pub interval_us: i32,
18363    #[doc = "The ID of the requested MAVLink message. v1.0 is limited to 254 messages."]
18364    pub message_id: u16,
18365}
18366impl MESSAGE_INTERVAL_DATA {
18367    pub const ENCODED_LEN: usize = 6usize;
18368    pub const DEFAULT: Self = Self {
18369        interval_us: 0_i32,
18370        message_id: 0_u16,
18371    };
18372    #[cfg(feature = "arbitrary")]
18373    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
18374        use arbitrary::{Arbitrary, Unstructured};
18375        let mut buf = [0u8; 1024];
18376        rng.fill_bytes(&mut buf);
18377        let mut unstructured = Unstructured::new(&buf);
18378        Self::arbitrary(&mut unstructured).unwrap_or_default()
18379    }
18380}
18381impl Default for MESSAGE_INTERVAL_DATA {
18382    fn default() -> Self {
18383        Self::DEFAULT.clone()
18384    }
18385}
18386impl MessageData for MESSAGE_INTERVAL_DATA {
18387    type Message = MavMessage;
18388    const ID: u32 = 244u32;
18389    const NAME: &'static str = "MESSAGE_INTERVAL";
18390    const EXTRA_CRC: u8 = 95u8;
18391    const ENCODED_LEN: usize = 6usize;
18392    fn deser(
18393        _version: MavlinkVersion,
18394        __input: &[u8],
18395    ) -> Result<Self, ::mavlink_core::error::ParserError> {
18396        let avail_len = __input.len();
18397        let mut payload_buf = [0; Self::ENCODED_LEN];
18398        let mut buf = if avail_len < Self::ENCODED_LEN {
18399            payload_buf[0..avail_len].copy_from_slice(__input);
18400            Bytes::new(&payload_buf)
18401        } else {
18402            Bytes::new(__input)
18403        };
18404        let mut __struct = Self::default();
18405        __struct.interval_us = buf.get_i32_le();
18406        __struct.message_id = buf.get_u16_le();
18407        Ok(__struct)
18408    }
18409    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
18410        let mut __tmp = BytesMut::new(bytes);
18411        #[allow(clippy::absurd_extreme_comparisons)]
18412        #[allow(unused_comparisons)]
18413        if __tmp.remaining() < Self::ENCODED_LEN {
18414            panic!(
18415                "buffer is too small (need {} bytes, but got {})",
18416                Self::ENCODED_LEN,
18417                __tmp.remaining(),
18418            )
18419        }
18420        __tmp.put_i32_le(self.interval_us);
18421        __tmp.put_u16_le(self.message_id);
18422        if matches!(version, MavlinkVersion::V2) {
18423            let len = __tmp.len();
18424            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
18425        } else {
18426            __tmp.len()
18427        }
18428    }
18429}
18430#[doc = "id: 47"]
18431#[doc = "Acknowledgment message during waypoint handling. The type field states if this message is a positive ack (type=0) or if an error happened (type=non-zero)."]
18432#[derive(Debug, Clone, PartialEq)]
18433#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18434#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18435pub struct MISSION_ACK_DATA {
18436    #[doc = "System ID"]
18437    pub target_system: u8,
18438    #[doc = "Component ID"]
18439    pub target_component: u8,
18440    #[doc = "Mission result."]
18441    pub mavtype: MavMissionResult,
18442    #[doc = "Mission type."]
18443    #[cfg_attr(feature = "serde", serde(default))]
18444    pub mission_type: MavMissionType,
18445    #[doc = "Id of new on-vehicle mission, fence, or rally point plan (on upload to vehicle).         The id is calculated and returned by a vehicle when a new plan is uploaded by a GCS.         The only requirement on the id is that it must change when there is any change to the on-vehicle plan type (there is no requirement that the id be globally unique).         0 on download from the vehicle to the GCS (on download the ID is set in MISSION_COUNT).         0 if plan ids are not supported.         The current on-vehicle plan ids are streamed in `MISSION_CURRENT`, allowing a GCS to determine if any part of the plan has changed and needs to be re-uploaded."]
18446    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18447    pub opaque_id: u32,
18448}
18449impl MISSION_ACK_DATA {
18450    pub const ENCODED_LEN: usize = 8usize;
18451    pub const DEFAULT: Self = Self {
18452        target_system: 0_u8,
18453        target_component: 0_u8,
18454        mavtype: MavMissionResult::DEFAULT,
18455        mission_type: MavMissionType::DEFAULT,
18456        opaque_id: 0_u32,
18457    };
18458    #[cfg(feature = "arbitrary")]
18459    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
18460        use arbitrary::{Arbitrary, Unstructured};
18461        let mut buf = [0u8; 1024];
18462        rng.fill_bytes(&mut buf);
18463        let mut unstructured = Unstructured::new(&buf);
18464        Self::arbitrary(&mut unstructured).unwrap_or_default()
18465    }
18466}
18467impl Default for MISSION_ACK_DATA {
18468    fn default() -> Self {
18469        Self::DEFAULT.clone()
18470    }
18471}
18472impl MessageData for MISSION_ACK_DATA {
18473    type Message = MavMessage;
18474    const ID: u32 = 47u32;
18475    const NAME: &'static str = "MISSION_ACK";
18476    const EXTRA_CRC: u8 = 153u8;
18477    const ENCODED_LEN: usize = 8usize;
18478    fn deser(
18479        _version: MavlinkVersion,
18480        __input: &[u8],
18481    ) -> Result<Self, ::mavlink_core::error::ParserError> {
18482        let avail_len = __input.len();
18483        let mut payload_buf = [0; Self::ENCODED_LEN];
18484        let mut buf = if avail_len < Self::ENCODED_LEN {
18485            payload_buf[0..avail_len].copy_from_slice(__input);
18486            Bytes::new(&payload_buf)
18487        } else {
18488            Bytes::new(__input)
18489        };
18490        let mut __struct = Self::default();
18491        __struct.target_system = buf.get_u8();
18492        __struct.target_component = buf.get_u8();
18493        let tmp = buf.get_u8();
18494        __struct.mavtype =
18495            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
18496                enum_type: "MavMissionResult",
18497                value: tmp as u32,
18498            })?;
18499        let tmp = buf.get_u8();
18500        __struct.mission_type =
18501            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
18502                enum_type: "MavMissionType",
18503                value: tmp as u32,
18504            })?;
18505        __struct.opaque_id = buf.get_u32_le();
18506        Ok(__struct)
18507    }
18508    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
18509        let mut __tmp = BytesMut::new(bytes);
18510        #[allow(clippy::absurd_extreme_comparisons)]
18511        #[allow(unused_comparisons)]
18512        if __tmp.remaining() < Self::ENCODED_LEN {
18513            panic!(
18514                "buffer is too small (need {} bytes, but got {})",
18515                Self::ENCODED_LEN,
18516                __tmp.remaining(),
18517            )
18518        }
18519        __tmp.put_u8(self.target_system);
18520        __tmp.put_u8(self.target_component);
18521        __tmp.put_u8(self.mavtype as u8);
18522        __tmp.put_u8(self.mission_type as u8);
18523        __tmp.put_u32_le(self.opaque_id);
18524        if matches!(version, MavlinkVersion::V2) {
18525            let len = __tmp.len();
18526            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
18527        } else {
18528            __tmp.len()
18529        }
18530    }
18531}
18532#[doc = "id: 45"]
18533#[doc = "Delete all mission items at once."]
18534#[derive(Debug, Clone, PartialEq)]
18535#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18536#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18537pub struct MISSION_CLEAR_ALL_DATA {
18538    #[doc = "System ID"]
18539    pub target_system: u8,
18540    #[doc = "Component ID"]
18541    pub target_component: u8,
18542    #[doc = "Mission type."]
18543    #[cfg_attr(feature = "serde", serde(default))]
18544    pub mission_type: MavMissionType,
18545}
18546impl MISSION_CLEAR_ALL_DATA {
18547    pub const ENCODED_LEN: usize = 3usize;
18548    pub const DEFAULT: Self = Self {
18549        target_system: 0_u8,
18550        target_component: 0_u8,
18551        mission_type: MavMissionType::DEFAULT,
18552    };
18553    #[cfg(feature = "arbitrary")]
18554    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
18555        use arbitrary::{Arbitrary, Unstructured};
18556        let mut buf = [0u8; 1024];
18557        rng.fill_bytes(&mut buf);
18558        let mut unstructured = Unstructured::new(&buf);
18559        Self::arbitrary(&mut unstructured).unwrap_or_default()
18560    }
18561}
18562impl Default for MISSION_CLEAR_ALL_DATA {
18563    fn default() -> Self {
18564        Self::DEFAULT.clone()
18565    }
18566}
18567impl MessageData for MISSION_CLEAR_ALL_DATA {
18568    type Message = MavMessage;
18569    const ID: u32 = 45u32;
18570    const NAME: &'static str = "MISSION_CLEAR_ALL";
18571    const EXTRA_CRC: u8 = 232u8;
18572    const ENCODED_LEN: usize = 3usize;
18573    fn deser(
18574        _version: MavlinkVersion,
18575        __input: &[u8],
18576    ) -> Result<Self, ::mavlink_core::error::ParserError> {
18577        let avail_len = __input.len();
18578        let mut payload_buf = [0; Self::ENCODED_LEN];
18579        let mut buf = if avail_len < Self::ENCODED_LEN {
18580            payload_buf[0..avail_len].copy_from_slice(__input);
18581            Bytes::new(&payload_buf)
18582        } else {
18583            Bytes::new(__input)
18584        };
18585        let mut __struct = Self::default();
18586        __struct.target_system = buf.get_u8();
18587        __struct.target_component = buf.get_u8();
18588        let tmp = buf.get_u8();
18589        __struct.mission_type =
18590            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
18591                enum_type: "MavMissionType",
18592                value: tmp as u32,
18593            })?;
18594        Ok(__struct)
18595    }
18596    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
18597        let mut __tmp = BytesMut::new(bytes);
18598        #[allow(clippy::absurd_extreme_comparisons)]
18599        #[allow(unused_comparisons)]
18600        if __tmp.remaining() < Self::ENCODED_LEN {
18601            panic!(
18602                "buffer is too small (need {} bytes, but got {})",
18603                Self::ENCODED_LEN,
18604                __tmp.remaining(),
18605            )
18606        }
18607        __tmp.put_u8(self.target_system);
18608        __tmp.put_u8(self.target_component);
18609        __tmp.put_u8(self.mission_type as u8);
18610        if matches!(version, MavlinkVersion::V2) {
18611            let len = __tmp.len();
18612            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
18613        } else {
18614            __tmp.len()
18615        }
18616    }
18617}
18618#[doc = "id: 44"]
18619#[doc = "This message is emitted as response to MISSION_REQUEST_LIST by the MAV and to initiate a write transaction. The GCS can then request the individual mission item based on the knowledge of the total number of waypoints."]
18620#[derive(Debug, Clone, PartialEq)]
18621#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18622#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18623pub struct MISSION_COUNT_DATA {
18624    #[doc = "Number of mission items in the sequence"]
18625    pub count: u16,
18626    #[doc = "System ID"]
18627    pub target_system: u8,
18628    #[doc = "Component ID"]
18629    pub target_component: u8,
18630    #[doc = "Mission type."]
18631    #[cfg_attr(feature = "serde", serde(default))]
18632    pub mission_type: MavMissionType,
18633    #[doc = "Id of current on-vehicle mission, fence, or rally point plan (on download from vehicle).         This field is used when downloading a plan from a vehicle to a GCS.         0 on upload to the vehicle from GCS.         0 if plan ids are not supported.         The current on-vehicle plan ids are streamed in `MISSION_CURRENT`, allowing a GCS to determine if any part of the plan has changed and needs to be re-uploaded.         The ids are recalculated by the vehicle when any part of the on-vehicle plan changes (when a new plan is uploaded, the vehicle returns the new id to the GCS in MISSION_ACK)."]
18634    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18635    pub opaque_id: u32,
18636}
18637impl MISSION_COUNT_DATA {
18638    pub const ENCODED_LEN: usize = 9usize;
18639    pub const DEFAULT: Self = Self {
18640        count: 0_u16,
18641        target_system: 0_u8,
18642        target_component: 0_u8,
18643        mission_type: MavMissionType::DEFAULT,
18644        opaque_id: 0_u32,
18645    };
18646    #[cfg(feature = "arbitrary")]
18647    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
18648        use arbitrary::{Arbitrary, Unstructured};
18649        let mut buf = [0u8; 1024];
18650        rng.fill_bytes(&mut buf);
18651        let mut unstructured = Unstructured::new(&buf);
18652        Self::arbitrary(&mut unstructured).unwrap_or_default()
18653    }
18654}
18655impl Default for MISSION_COUNT_DATA {
18656    fn default() -> Self {
18657        Self::DEFAULT.clone()
18658    }
18659}
18660impl MessageData for MISSION_COUNT_DATA {
18661    type Message = MavMessage;
18662    const ID: u32 = 44u32;
18663    const NAME: &'static str = "MISSION_COUNT";
18664    const EXTRA_CRC: u8 = 221u8;
18665    const ENCODED_LEN: usize = 9usize;
18666    fn deser(
18667        _version: MavlinkVersion,
18668        __input: &[u8],
18669    ) -> Result<Self, ::mavlink_core::error::ParserError> {
18670        let avail_len = __input.len();
18671        let mut payload_buf = [0; Self::ENCODED_LEN];
18672        let mut buf = if avail_len < Self::ENCODED_LEN {
18673            payload_buf[0..avail_len].copy_from_slice(__input);
18674            Bytes::new(&payload_buf)
18675        } else {
18676            Bytes::new(__input)
18677        };
18678        let mut __struct = Self::default();
18679        __struct.count = buf.get_u16_le();
18680        __struct.target_system = buf.get_u8();
18681        __struct.target_component = buf.get_u8();
18682        let tmp = buf.get_u8();
18683        __struct.mission_type =
18684            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
18685                enum_type: "MavMissionType",
18686                value: tmp as u32,
18687            })?;
18688        __struct.opaque_id = buf.get_u32_le();
18689        Ok(__struct)
18690    }
18691    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
18692        let mut __tmp = BytesMut::new(bytes);
18693        #[allow(clippy::absurd_extreme_comparisons)]
18694        #[allow(unused_comparisons)]
18695        if __tmp.remaining() < Self::ENCODED_LEN {
18696            panic!(
18697                "buffer is too small (need {} bytes, but got {})",
18698                Self::ENCODED_LEN,
18699                __tmp.remaining(),
18700            )
18701        }
18702        __tmp.put_u16_le(self.count);
18703        __tmp.put_u8(self.target_system);
18704        __tmp.put_u8(self.target_component);
18705        __tmp.put_u8(self.mission_type as u8);
18706        __tmp.put_u32_le(self.opaque_id);
18707        if matches!(version, MavlinkVersion::V2) {
18708            let len = __tmp.len();
18709            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
18710        } else {
18711            __tmp.len()
18712        }
18713    }
18714}
18715#[doc = "id: 42"]
18716#[doc = "Message that announces the sequence number of the current target mission item (that the system will fly towards/execute when the mission is running).         This message should be streamed all the time (nominally at 1Hz).         This message should be emitted following a call to MAV_CMD_DO_SET_MISSION_CURRENT or MISSION_SET_CURRENT."]
18717#[derive(Debug, Clone, PartialEq)]
18718#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18719#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18720pub struct MISSION_CURRENT_DATA {
18721    #[doc = "Sequence"]
18722    pub seq: u16,
18723    #[doc = "Total number of mission items on vehicle (on last item, sequence == total). If the autopilot stores its home location as part of the mission this will be excluded from the total. 0: Not supported, UINT16_MAX if no mission is present on the vehicle."]
18724    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18725    pub total: u16,
18726    #[doc = "Mission state machine state. MISSION_STATE_UNKNOWN if state reporting not supported."]
18727    #[cfg_attr(feature = "serde", serde(default))]
18728    pub mission_state: MissionState,
18729    #[doc = "Vehicle is in a mode that can execute mission items or suspended. 0: Unknown, 1: In mission mode, 2: Suspended (not in mission mode)."]
18730    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18731    pub mission_mode: u8,
18732    #[doc = "Id of current on-vehicle mission plan, or 0 if IDs are not supported or there is no mission loaded. GCS can use this to track changes to the mission plan type. The same value is returned on mission upload (in the MISSION_ACK)."]
18733    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18734    pub mission_id: u32,
18735    #[doc = "Id of current on-vehicle fence plan, or 0 if IDs are not supported or there is no fence loaded. GCS can use this to track changes to the fence plan type. The same value is returned on fence upload (in the MISSION_ACK)."]
18736    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18737    pub fence_id: u32,
18738    #[doc = "Id of current on-vehicle rally point plan, or 0 if IDs are not supported or there are no rally points loaded. GCS can use this to track changes to the rally point plan type. The same value is returned on rally point upload (in the MISSION_ACK)."]
18739    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
18740    pub rally_points_id: u32,
18741}
18742impl MISSION_CURRENT_DATA {
18743    pub const ENCODED_LEN: usize = 18usize;
18744    pub const DEFAULT: Self = Self {
18745        seq: 0_u16,
18746        total: 0_u16,
18747        mission_state: MissionState::DEFAULT,
18748        mission_mode: 0_u8,
18749        mission_id: 0_u32,
18750        fence_id: 0_u32,
18751        rally_points_id: 0_u32,
18752    };
18753    #[cfg(feature = "arbitrary")]
18754    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
18755        use arbitrary::{Arbitrary, Unstructured};
18756        let mut buf = [0u8; 1024];
18757        rng.fill_bytes(&mut buf);
18758        let mut unstructured = Unstructured::new(&buf);
18759        Self::arbitrary(&mut unstructured).unwrap_or_default()
18760    }
18761}
18762impl Default for MISSION_CURRENT_DATA {
18763    fn default() -> Self {
18764        Self::DEFAULT.clone()
18765    }
18766}
18767impl MessageData for MISSION_CURRENT_DATA {
18768    type Message = MavMessage;
18769    const ID: u32 = 42u32;
18770    const NAME: &'static str = "MISSION_CURRENT";
18771    const EXTRA_CRC: u8 = 28u8;
18772    const ENCODED_LEN: usize = 18usize;
18773    fn deser(
18774        _version: MavlinkVersion,
18775        __input: &[u8],
18776    ) -> Result<Self, ::mavlink_core::error::ParserError> {
18777        let avail_len = __input.len();
18778        let mut payload_buf = [0; Self::ENCODED_LEN];
18779        let mut buf = if avail_len < Self::ENCODED_LEN {
18780            payload_buf[0..avail_len].copy_from_slice(__input);
18781            Bytes::new(&payload_buf)
18782        } else {
18783            Bytes::new(__input)
18784        };
18785        let mut __struct = Self::default();
18786        __struct.seq = buf.get_u16_le();
18787        __struct.total = buf.get_u16_le();
18788        let tmp = buf.get_u8();
18789        __struct.mission_state =
18790            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
18791                enum_type: "MissionState",
18792                value: tmp as u32,
18793            })?;
18794        __struct.mission_mode = buf.get_u8();
18795        __struct.mission_id = buf.get_u32_le();
18796        __struct.fence_id = buf.get_u32_le();
18797        __struct.rally_points_id = buf.get_u32_le();
18798        Ok(__struct)
18799    }
18800    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
18801        let mut __tmp = BytesMut::new(bytes);
18802        #[allow(clippy::absurd_extreme_comparisons)]
18803        #[allow(unused_comparisons)]
18804        if __tmp.remaining() < Self::ENCODED_LEN {
18805            panic!(
18806                "buffer is too small (need {} bytes, but got {})",
18807                Self::ENCODED_LEN,
18808                __tmp.remaining(),
18809            )
18810        }
18811        __tmp.put_u16_le(self.seq);
18812        __tmp.put_u16_le(self.total);
18813        __tmp.put_u8(self.mission_state as u8);
18814        __tmp.put_u8(self.mission_mode);
18815        __tmp.put_u32_le(self.mission_id);
18816        __tmp.put_u32_le(self.fence_id);
18817        __tmp.put_u32_le(self.rally_points_id);
18818        if matches!(version, MavlinkVersion::V2) {
18819            let len = __tmp.len();
18820            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
18821        } else {
18822            __tmp.len()
18823        }
18824    }
18825}
18826#[deprecated = " See `MISSION_ITEM_INT` (Deprecated since 2020-06)"]
18827#[doc = "id: 39"]
18828#[doc = "Message encoding a mission item. This message is emitted to announce                 the presence of a mission item and to set a mission item on the system. The mission item can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed (NED), global frame is Z-up, right handed (ENU). NaN may be used to indicate an optional/default value (e.g. to use the system's current latitude or yaw rather than a specific value). See also <https://mavlink.io/en/services/mission.html>."]
18829#[derive(Debug, Clone, PartialEq)]
18830#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18831#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18832pub struct MISSION_ITEM_DATA {
18833    #[doc = "PARAM1, see MAV_CMD enum"]
18834    pub param1: f32,
18835    #[doc = "PARAM2, see MAV_CMD enum"]
18836    pub param2: f32,
18837    #[doc = "PARAM3, see MAV_CMD enum"]
18838    pub param3: f32,
18839    #[doc = "PARAM4, see MAV_CMD enum"]
18840    pub param4: f32,
18841    #[doc = "PARAM5 / local: X coordinate, global: latitude"]
18842    pub x: f32,
18843    #[doc = "PARAM6 / local: Y coordinate, global: longitude"]
18844    pub y: f32,
18845    #[doc = "PARAM7 / local: Z coordinate, global: altitude (relative or absolute, depending on frame)."]
18846    pub z: f32,
18847    #[doc = "Sequence"]
18848    pub seq: u16,
18849    #[doc = "The scheduled action for the waypoint."]
18850    pub command: MavCmd,
18851    #[doc = "System ID"]
18852    pub target_system: u8,
18853    #[doc = "Component ID"]
18854    pub target_component: u8,
18855    #[doc = "The coordinate system of the waypoint."]
18856    pub frame: MavFrame,
18857    #[doc = "false:0, true:1"]
18858    pub current: u8,
18859    #[doc = "Autocontinue to next waypoint. 0: false, 1: true. Set false to pause mission after the item completes."]
18860    pub autocontinue: u8,
18861    #[doc = "Mission type."]
18862    #[cfg_attr(feature = "serde", serde(default))]
18863    pub mission_type: MavMissionType,
18864}
18865impl MISSION_ITEM_DATA {
18866    pub const ENCODED_LEN: usize = 38usize;
18867    pub const DEFAULT: Self = Self {
18868        param1: 0.0_f32,
18869        param2: 0.0_f32,
18870        param3: 0.0_f32,
18871        param4: 0.0_f32,
18872        x: 0.0_f32,
18873        y: 0.0_f32,
18874        z: 0.0_f32,
18875        seq: 0_u16,
18876        command: MavCmd::DEFAULT,
18877        target_system: 0_u8,
18878        target_component: 0_u8,
18879        frame: MavFrame::DEFAULT,
18880        current: 0_u8,
18881        autocontinue: 0_u8,
18882        mission_type: MavMissionType::DEFAULT,
18883    };
18884    #[cfg(feature = "arbitrary")]
18885    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
18886        use arbitrary::{Arbitrary, Unstructured};
18887        let mut buf = [0u8; 1024];
18888        rng.fill_bytes(&mut buf);
18889        let mut unstructured = Unstructured::new(&buf);
18890        Self::arbitrary(&mut unstructured).unwrap_or_default()
18891    }
18892}
18893impl Default for MISSION_ITEM_DATA {
18894    fn default() -> Self {
18895        Self::DEFAULT.clone()
18896    }
18897}
18898impl MessageData for MISSION_ITEM_DATA {
18899    type Message = MavMessage;
18900    const ID: u32 = 39u32;
18901    const NAME: &'static str = "MISSION_ITEM";
18902    const EXTRA_CRC: u8 = 254u8;
18903    const ENCODED_LEN: usize = 38usize;
18904    fn deser(
18905        _version: MavlinkVersion,
18906        __input: &[u8],
18907    ) -> Result<Self, ::mavlink_core::error::ParserError> {
18908        let avail_len = __input.len();
18909        let mut payload_buf = [0; Self::ENCODED_LEN];
18910        let mut buf = if avail_len < Self::ENCODED_LEN {
18911            payload_buf[0..avail_len].copy_from_slice(__input);
18912            Bytes::new(&payload_buf)
18913        } else {
18914            Bytes::new(__input)
18915        };
18916        let mut __struct = Self::default();
18917        __struct.param1 = buf.get_f32_le();
18918        __struct.param2 = buf.get_f32_le();
18919        __struct.param3 = buf.get_f32_le();
18920        __struct.param4 = buf.get_f32_le();
18921        __struct.x = buf.get_f32_le();
18922        __struct.y = buf.get_f32_le();
18923        __struct.z = buf.get_f32_le();
18924        __struct.seq = buf.get_u16_le();
18925        let tmp = buf.get_u16_le();
18926        __struct.command = FromPrimitive::from_u16(tmp).ok_or(
18927            ::mavlink_core::error::ParserError::InvalidEnum {
18928                enum_type: "MavCmd",
18929                value: tmp as u32,
18930            },
18931        )?;
18932        __struct.target_system = buf.get_u8();
18933        __struct.target_component = buf.get_u8();
18934        let tmp = buf.get_u8();
18935        __struct.frame =
18936            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
18937                enum_type: "MavFrame",
18938                value: tmp as u32,
18939            })?;
18940        __struct.current = buf.get_u8();
18941        __struct.autocontinue = buf.get_u8();
18942        let tmp = buf.get_u8();
18943        __struct.mission_type =
18944            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
18945                enum_type: "MavMissionType",
18946                value: tmp as u32,
18947            })?;
18948        Ok(__struct)
18949    }
18950    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
18951        let mut __tmp = BytesMut::new(bytes);
18952        #[allow(clippy::absurd_extreme_comparisons)]
18953        #[allow(unused_comparisons)]
18954        if __tmp.remaining() < Self::ENCODED_LEN {
18955            panic!(
18956                "buffer is too small (need {} bytes, but got {})",
18957                Self::ENCODED_LEN,
18958                __tmp.remaining(),
18959            )
18960        }
18961        __tmp.put_f32_le(self.param1);
18962        __tmp.put_f32_le(self.param2);
18963        __tmp.put_f32_le(self.param3);
18964        __tmp.put_f32_le(self.param4);
18965        __tmp.put_f32_le(self.x);
18966        __tmp.put_f32_le(self.y);
18967        __tmp.put_f32_le(self.z);
18968        __tmp.put_u16_le(self.seq);
18969        __tmp.put_u16_le(self.command as u16);
18970        __tmp.put_u8(self.target_system);
18971        __tmp.put_u8(self.target_component);
18972        __tmp.put_u8(self.frame as u8);
18973        __tmp.put_u8(self.current);
18974        __tmp.put_u8(self.autocontinue);
18975        __tmp.put_u8(self.mission_type as u8);
18976        if matches!(version, MavlinkVersion::V2) {
18977            let len = __tmp.len();
18978            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
18979        } else {
18980            __tmp.len()
18981        }
18982    }
18983}
18984#[doc = "id: 73"]
18985#[doc = "Message encoding a mission item. This message is emitted to announce                 the presence of a mission item and to set a mission item on the system. The mission item can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed (NED), global frame is Z-up, right handed (ENU). NaN or INT32_MAX may be used in float/integer params (respectively) to indicate optional/default values (e.g. to use the component's current latitude, yaw rather than a specific value). See also <https://mavlink.io/en/services/mission.html>."]
18986#[derive(Debug, Clone, PartialEq)]
18987#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18988#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18989pub struct MISSION_ITEM_INT_DATA {
18990    #[doc = "PARAM1, see MAV_CMD enum"]
18991    pub param1: f32,
18992    #[doc = "PARAM2, see MAV_CMD enum"]
18993    pub param2: f32,
18994    #[doc = "PARAM3, see MAV_CMD enum"]
18995    pub param3: f32,
18996    #[doc = "PARAM4, see MAV_CMD enum"]
18997    pub param4: f32,
18998    #[doc = "PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7"]
18999    pub x: i32,
19000    #[doc = "PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7"]
19001    pub y: i32,
19002    #[doc = "PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame."]
19003    pub z: f32,
19004    #[doc = "Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4)."]
19005    pub seq: u16,
19006    #[doc = "The scheduled action for the waypoint."]
19007    pub command: MavCmd,
19008    #[doc = "System ID"]
19009    pub target_system: u8,
19010    #[doc = "Component ID"]
19011    pub target_component: u8,
19012    #[doc = "The coordinate system of the waypoint."]
19013    pub frame: MavFrame,
19014    #[doc = "false:0, true:1"]
19015    pub current: u8,
19016    #[doc = "Autocontinue to next waypoint. 0: false, 1: true. Set false to pause mission after the item completes."]
19017    pub autocontinue: u8,
19018    #[doc = "Mission type."]
19019    #[cfg_attr(feature = "serde", serde(default))]
19020    pub mission_type: MavMissionType,
19021}
19022impl MISSION_ITEM_INT_DATA {
19023    pub const ENCODED_LEN: usize = 38usize;
19024    pub const DEFAULT: Self = Self {
19025        param1: 0.0_f32,
19026        param2: 0.0_f32,
19027        param3: 0.0_f32,
19028        param4: 0.0_f32,
19029        x: 0_i32,
19030        y: 0_i32,
19031        z: 0.0_f32,
19032        seq: 0_u16,
19033        command: MavCmd::DEFAULT,
19034        target_system: 0_u8,
19035        target_component: 0_u8,
19036        frame: MavFrame::DEFAULT,
19037        current: 0_u8,
19038        autocontinue: 0_u8,
19039        mission_type: MavMissionType::DEFAULT,
19040    };
19041    #[cfg(feature = "arbitrary")]
19042    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
19043        use arbitrary::{Arbitrary, Unstructured};
19044        let mut buf = [0u8; 1024];
19045        rng.fill_bytes(&mut buf);
19046        let mut unstructured = Unstructured::new(&buf);
19047        Self::arbitrary(&mut unstructured).unwrap_or_default()
19048    }
19049}
19050impl Default for MISSION_ITEM_INT_DATA {
19051    fn default() -> Self {
19052        Self::DEFAULT.clone()
19053    }
19054}
19055impl MessageData for MISSION_ITEM_INT_DATA {
19056    type Message = MavMessage;
19057    const ID: u32 = 73u32;
19058    const NAME: &'static str = "MISSION_ITEM_INT";
19059    const EXTRA_CRC: u8 = 38u8;
19060    const ENCODED_LEN: usize = 38usize;
19061    fn deser(
19062        _version: MavlinkVersion,
19063        __input: &[u8],
19064    ) -> Result<Self, ::mavlink_core::error::ParserError> {
19065        let avail_len = __input.len();
19066        let mut payload_buf = [0; Self::ENCODED_LEN];
19067        let mut buf = if avail_len < Self::ENCODED_LEN {
19068            payload_buf[0..avail_len].copy_from_slice(__input);
19069            Bytes::new(&payload_buf)
19070        } else {
19071            Bytes::new(__input)
19072        };
19073        let mut __struct = Self::default();
19074        __struct.param1 = buf.get_f32_le();
19075        __struct.param2 = buf.get_f32_le();
19076        __struct.param3 = buf.get_f32_le();
19077        __struct.param4 = buf.get_f32_le();
19078        __struct.x = buf.get_i32_le();
19079        __struct.y = buf.get_i32_le();
19080        __struct.z = buf.get_f32_le();
19081        __struct.seq = buf.get_u16_le();
19082        let tmp = buf.get_u16_le();
19083        __struct.command = FromPrimitive::from_u16(tmp).ok_or(
19084            ::mavlink_core::error::ParserError::InvalidEnum {
19085                enum_type: "MavCmd",
19086                value: tmp as u32,
19087            },
19088        )?;
19089        __struct.target_system = buf.get_u8();
19090        __struct.target_component = buf.get_u8();
19091        let tmp = buf.get_u8();
19092        __struct.frame =
19093            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
19094                enum_type: "MavFrame",
19095                value: tmp as u32,
19096            })?;
19097        __struct.current = buf.get_u8();
19098        __struct.autocontinue = buf.get_u8();
19099        let tmp = buf.get_u8();
19100        __struct.mission_type =
19101            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
19102                enum_type: "MavMissionType",
19103                value: tmp as u32,
19104            })?;
19105        Ok(__struct)
19106    }
19107    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
19108        let mut __tmp = BytesMut::new(bytes);
19109        #[allow(clippy::absurd_extreme_comparisons)]
19110        #[allow(unused_comparisons)]
19111        if __tmp.remaining() < Self::ENCODED_LEN {
19112            panic!(
19113                "buffer is too small (need {} bytes, but got {})",
19114                Self::ENCODED_LEN,
19115                __tmp.remaining(),
19116            )
19117        }
19118        __tmp.put_f32_le(self.param1);
19119        __tmp.put_f32_le(self.param2);
19120        __tmp.put_f32_le(self.param3);
19121        __tmp.put_f32_le(self.param4);
19122        __tmp.put_i32_le(self.x);
19123        __tmp.put_i32_le(self.y);
19124        __tmp.put_f32_le(self.z);
19125        __tmp.put_u16_le(self.seq);
19126        __tmp.put_u16_le(self.command as u16);
19127        __tmp.put_u8(self.target_system);
19128        __tmp.put_u8(self.target_component);
19129        __tmp.put_u8(self.frame as u8);
19130        __tmp.put_u8(self.current);
19131        __tmp.put_u8(self.autocontinue);
19132        __tmp.put_u8(self.mission_type as u8);
19133        if matches!(version, MavlinkVersion::V2) {
19134            let len = __tmp.len();
19135            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
19136        } else {
19137            __tmp.len()
19138        }
19139    }
19140}
19141#[doc = "id: 46"]
19142#[doc = "A certain mission item has been reached. The system will either hold this position (or circle on the orbit) or (if the autocontinue on the WP was set) continue to the next waypoint."]
19143#[derive(Debug, Clone, PartialEq)]
19144#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19145#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19146pub struct MISSION_ITEM_REACHED_DATA {
19147    #[doc = "Sequence"]
19148    pub seq: u16,
19149}
19150impl MISSION_ITEM_REACHED_DATA {
19151    pub const ENCODED_LEN: usize = 2usize;
19152    pub const DEFAULT: Self = Self { seq: 0_u16 };
19153    #[cfg(feature = "arbitrary")]
19154    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
19155        use arbitrary::{Arbitrary, Unstructured};
19156        let mut buf = [0u8; 1024];
19157        rng.fill_bytes(&mut buf);
19158        let mut unstructured = Unstructured::new(&buf);
19159        Self::arbitrary(&mut unstructured).unwrap_or_default()
19160    }
19161}
19162impl Default for MISSION_ITEM_REACHED_DATA {
19163    fn default() -> Self {
19164        Self::DEFAULT.clone()
19165    }
19166}
19167impl MessageData for MISSION_ITEM_REACHED_DATA {
19168    type Message = MavMessage;
19169    const ID: u32 = 46u32;
19170    const NAME: &'static str = "MISSION_ITEM_REACHED";
19171    const EXTRA_CRC: u8 = 11u8;
19172    const ENCODED_LEN: usize = 2usize;
19173    fn deser(
19174        _version: MavlinkVersion,
19175        __input: &[u8],
19176    ) -> Result<Self, ::mavlink_core::error::ParserError> {
19177        let avail_len = __input.len();
19178        let mut payload_buf = [0; Self::ENCODED_LEN];
19179        let mut buf = if avail_len < Self::ENCODED_LEN {
19180            payload_buf[0..avail_len].copy_from_slice(__input);
19181            Bytes::new(&payload_buf)
19182        } else {
19183            Bytes::new(__input)
19184        };
19185        let mut __struct = Self::default();
19186        __struct.seq = buf.get_u16_le();
19187        Ok(__struct)
19188    }
19189    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
19190        let mut __tmp = BytesMut::new(bytes);
19191        #[allow(clippy::absurd_extreme_comparisons)]
19192        #[allow(unused_comparisons)]
19193        if __tmp.remaining() < Self::ENCODED_LEN {
19194            panic!(
19195                "buffer is too small (need {} bytes, but got {})",
19196                Self::ENCODED_LEN,
19197                __tmp.remaining(),
19198            )
19199        }
19200        __tmp.put_u16_le(self.seq);
19201        if matches!(version, MavlinkVersion::V2) {
19202            let len = __tmp.len();
19203            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
19204        } else {
19205            __tmp.len()
19206        }
19207    }
19208}
19209#[deprecated = "A system that gets this request should respond with MISSION_ITEM_INT (as though MISSION_REQUEST_INT was received). See `MISSION_REQUEST_INT` (Deprecated since 2020-06)"]
19210#[doc = "id: 40"]
19211#[doc = "Request the information of the mission item with the sequence number seq. The response of the system to this message should be a MISSION_ITEM message. <https://mavlink.io/en/services/mission.html>."]
19212#[derive(Debug, Clone, PartialEq)]
19213#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19214#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19215pub struct MISSION_REQUEST_DATA {
19216    #[doc = "Sequence"]
19217    pub seq: u16,
19218    #[doc = "System ID"]
19219    pub target_system: u8,
19220    #[doc = "Component ID"]
19221    pub target_component: u8,
19222    #[doc = "Mission type."]
19223    #[cfg_attr(feature = "serde", serde(default))]
19224    pub mission_type: MavMissionType,
19225}
19226impl MISSION_REQUEST_DATA {
19227    pub const ENCODED_LEN: usize = 5usize;
19228    pub const DEFAULT: Self = Self {
19229        seq: 0_u16,
19230        target_system: 0_u8,
19231        target_component: 0_u8,
19232        mission_type: MavMissionType::DEFAULT,
19233    };
19234    #[cfg(feature = "arbitrary")]
19235    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
19236        use arbitrary::{Arbitrary, Unstructured};
19237        let mut buf = [0u8; 1024];
19238        rng.fill_bytes(&mut buf);
19239        let mut unstructured = Unstructured::new(&buf);
19240        Self::arbitrary(&mut unstructured).unwrap_or_default()
19241    }
19242}
19243impl Default for MISSION_REQUEST_DATA {
19244    fn default() -> Self {
19245        Self::DEFAULT.clone()
19246    }
19247}
19248impl MessageData for MISSION_REQUEST_DATA {
19249    type Message = MavMessage;
19250    const ID: u32 = 40u32;
19251    const NAME: &'static str = "MISSION_REQUEST";
19252    const EXTRA_CRC: u8 = 230u8;
19253    const ENCODED_LEN: usize = 5usize;
19254    fn deser(
19255        _version: MavlinkVersion,
19256        __input: &[u8],
19257    ) -> Result<Self, ::mavlink_core::error::ParserError> {
19258        let avail_len = __input.len();
19259        let mut payload_buf = [0; Self::ENCODED_LEN];
19260        let mut buf = if avail_len < Self::ENCODED_LEN {
19261            payload_buf[0..avail_len].copy_from_slice(__input);
19262            Bytes::new(&payload_buf)
19263        } else {
19264            Bytes::new(__input)
19265        };
19266        let mut __struct = Self::default();
19267        __struct.seq = buf.get_u16_le();
19268        __struct.target_system = buf.get_u8();
19269        __struct.target_component = buf.get_u8();
19270        let tmp = buf.get_u8();
19271        __struct.mission_type =
19272            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
19273                enum_type: "MavMissionType",
19274                value: tmp as u32,
19275            })?;
19276        Ok(__struct)
19277    }
19278    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
19279        let mut __tmp = BytesMut::new(bytes);
19280        #[allow(clippy::absurd_extreme_comparisons)]
19281        #[allow(unused_comparisons)]
19282        if __tmp.remaining() < Self::ENCODED_LEN {
19283            panic!(
19284                "buffer is too small (need {} bytes, but got {})",
19285                Self::ENCODED_LEN,
19286                __tmp.remaining(),
19287            )
19288        }
19289        __tmp.put_u16_le(self.seq);
19290        __tmp.put_u8(self.target_system);
19291        __tmp.put_u8(self.target_component);
19292        __tmp.put_u8(self.mission_type as u8);
19293        if matches!(version, MavlinkVersion::V2) {
19294            let len = __tmp.len();
19295            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
19296        } else {
19297            __tmp.len()
19298        }
19299    }
19300}
19301#[doc = "id: 51"]
19302#[doc = "Request the information of the mission item with the sequence number seq. The response of the system to this message should be a MISSION_ITEM_INT message. <https://mavlink.io/en/services/mission.html>."]
19303#[derive(Debug, Clone, PartialEq)]
19304#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19305#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19306pub struct MISSION_REQUEST_INT_DATA {
19307    #[doc = "Sequence"]
19308    pub seq: u16,
19309    #[doc = "System ID"]
19310    pub target_system: u8,
19311    #[doc = "Component ID"]
19312    pub target_component: u8,
19313    #[doc = "Mission type."]
19314    #[cfg_attr(feature = "serde", serde(default))]
19315    pub mission_type: MavMissionType,
19316}
19317impl MISSION_REQUEST_INT_DATA {
19318    pub const ENCODED_LEN: usize = 5usize;
19319    pub const DEFAULT: Self = Self {
19320        seq: 0_u16,
19321        target_system: 0_u8,
19322        target_component: 0_u8,
19323        mission_type: MavMissionType::DEFAULT,
19324    };
19325    #[cfg(feature = "arbitrary")]
19326    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
19327        use arbitrary::{Arbitrary, Unstructured};
19328        let mut buf = [0u8; 1024];
19329        rng.fill_bytes(&mut buf);
19330        let mut unstructured = Unstructured::new(&buf);
19331        Self::arbitrary(&mut unstructured).unwrap_or_default()
19332    }
19333}
19334impl Default for MISSION_REQUEST_INT_DATA {
19335    fn default() -> Self {
19336        Self::DEFAULT.clone()
19337    }
19338}
19339impl MessageData for MISSION_REQUEST_INT_DATA {
19340    type Message = MavMessage;
19341    const ID: u32 = 51u32;
19342    const NAME: &'static str = "MISSION_REQUEST_INT";
19343    const EXTRA_CRC: u8 = 196u8;
19344    const ENCODED_LEN: usize = 5usize;
19345    fn deser(
19346        _version: MavlinkVersion,
19347        __input: &[u8],
19348    ) -> Result<Self, ::mavlink_core::error::ParserError> {
19349        let avail_len = __input.len();
19350        let mut payload_buf = [0; Self::ENCODED_LEN];
19351        let mut buf = if avail_len < Self::ENCODED_LEN {
19352            payload_buf[0..avail_len].copy_from_slice(__input);
19353            Bytes::new(&payload_buf)
19354        } else {
19355            Bytes::new(__input)
19356        };
19357        let mut __struct = Self::default();
19358        __struct.seq = buf.get_u16_le();
19359        __struct.target_system = buf.get_u8();
19360        __struct.target_component = buf.get_u8();
19361        let tmp = buf.get_u8();
19362        __struct.mission_type =
19363            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
19364                enum_type: "MavMissionType",
19365                value: tmp as u32,
19366            })?;
19367        Ok(__struct)
19368    }
19369    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
19370        let mut __tmp = BytesMut::new(bytes);
19371        #[allow(clippy::absurd_extreme_comparisons)]
19372        #[allow(unused_comparisons)]
19373        if __tmp.remaining() < Self::ENCODED_LEN {
19374            panic!(
19375                "buffer is too small (need {} bytes, but got {})",
19376                Self::ENCODED_LEN,
19377                __tmp.remaining(),
19378            )
19379        }
19380        __tmp.put_u16_le(self.seq);
19381        __tmp.put_u8(self.target_system);
19382        __tmp.put_u8(self.target_component);
19383        __tmp.put_u8(self.mission_type as u8);
19384        if matches!(version, MavlinkVersion::V2) {
19385            let len = __tmp.len();
19386            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
19387        } else {
19388            __tmp.len()
19389        }
19390    }
19391}
19392#[doc = "id: 43"]
19393#[doc = "Request the overall list of mission items from the system/component."]
19394#[derive(Debug, Clone, PartialEq)]
19395#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19396#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19397pub struct MISSION_REQUEST_LIST_DATA {
19398    #[doc = "System ID"]
19399    pub target_system: u8,
19400    #[doc = "Component ID"]
19401    pub target_component: u8,
19402    #[doc = "Mission type."]
19403    #[cfg_attr(feature = "serde", serde(default))]
19404    pub mission_type: MavMissionType,
19405}
19406impl MISSION_REQUEST_LIST_DATA {
19407    pub const ENCODED_LEN: usize = 3usize;
19408    pub const DEFAULT: Self = Self {
19409        target_system: 0_u8,
19410        target_component: 0_u8,
19411        mission_type: MavMissionType::DEFAULT,
19412    };
19413    #[cfg(feature = "arbitrary")]
19414    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
19415        use arbitrary::{Arbitrary, Unstructured};
19416        let mut buf = [0u8; 1024];
19417        rng.fill_bytes(&mut buf);
19418        let mut unstructured = Unstructured::new(&buf);
19419        Self::arbitrary(&mut unstructured).unwrap_or_default()
19420    }
19421}
19422impl Default for MISSION_REQUEST_LIST_DATA {
19423    fn default() -> Self {
19424        Self::DEFAULT.clone()
19425    }
19426}
19427impl MessageData for MISSION_REQUEST_LIST_DATA {
19428    type Message = MavMessage;
19429    const ID: u32 = 43u32;
19430    const NAME: &'static str = "MISSION_REQUEST_LIST";
19431    const EXTRA_CRC: u8 = 132u8;
19432    const ENCODED_LEN: usize = 3usize;
19433    fn deser(
19434        _version: MavlinkVersion,
19435        __input: &[u8],
19436    ) -> Result<Self, ::mavlink_core::error::ParserError> {
19437        let avail_len = __input.len();
19438        let mut payload_buf = [0; Self::ENCODED_LEN];
19439        let mut buf = if avail_len < Self::ENCODED_LEN {
19440            payload_buf[0..avail_len].copy_from_slice(__input);
19441            Bytes::new(&payload_buf)
19442        } else {
19443            Bytes::new(__input)
19444        };
19445        let mut __struct = Self::default();
19446        __struct.target_system = buf.get_u8();
19447        __struct.target_component = buf.get_u8();
19448        let tmp = buf.get_u8();
19449        __struct.mission_type =
19450            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
19451                enum_type: "MavMissionType",
19452                value: tmp as u32,
19453            })?;
19454        Ok(__struct)
19455    }
19456    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
19457        let mut __tmp = BytesMut::new(bytes);
19458        #[allow(clippy::absurd_extreme_comparisons)]
19459        #[allow(unused_comparisons)]
19460        if __tmp.remaining() < Self::ENCODED_LEN {
19461            panic!(
19462                "buffer is too small (need {} bytes, but got {})",
19463                Self::ENCODED_LEN,
19464                __tmp.remaining(),
19465            )
19466        }
19467        __tmp.put_u8(self.target_system);
19468        __tmp.put_u8(self.target_component);
19469        __tmp.put_u8(self.mission_type as u8);
19470        if matches!(version, MavlinkVersion::V2) {
19471            let len = __tmp.len();
19472            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
19473        } else {
19474            __tmp.len()
19475        }
19476    }
19477}
19478#[doc = "id: 37"]
19479#[doc = "Request a partial list of mission items from the system/component. <https://mavlink.io/en/services/mission.html>. If start and end index are the same, just send one waypoint."]
19480#[derive(Debug, Clone, PartialEq)]
19481#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19482#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19483pub struct MISSION_REQUEST_PARTIAL_LIST_DATA {
19484    #[doc = "Start index"]
19485    pub start_index: i16,
19486    #[doc = "End index, -1 by default (-1: send list to end). Else a valid index of the list"]
19487    pub end_index: i16,
19488    #[doc = "System ID"]
19489    pub target_system: u8,
19490    #[doc = "Component ID"]
19491    pub target_component: u8,
19492    #[doc = "Mission type."]
19493    #[cfg_attr(feature = "serde", serde(default))]
19494    pub mission_type: MavMissionType,
19495}
19496impl MISSION_REQUEST_PARTIAL_LIST_DATA {
19497    pub const ENCODED_LEN: usize = 7usize;
19498    pub const DEFAULT: Self = Self {
19499        start_index: 0_i16,
19500        end_index: 0_i16,
19501        target_system: 0_u8,
19502        target_component: 0_u8,
19503        mission_type: MavMissionType::DEFAULT,
19504    };
19505    #[cfg(feature = "arbitrary")]
19506    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
19507        use arbitrary::{Arbitrary, Unstructured};
19508        let mut buf = [0u8; 1024];
19509        rng.fill_bytes(&mut buf);
19510        let mut unstructured = Unstructured::new(&buf);
19511        Self::arbitrary(&mut unstructured).unwrap_or_default()
19512    }
19513}
19514impl Default for MISSION_REQUEST_PARTIAL_LIST_DATA {
19515    fn default() -> Self {
19516        Self::DEFAULT.clone()
19517    }
19518}
19519impl MessageData for MISSION_REQUEST_PARTIAL_LIST_DATA {
19520    type Message = MavMessage;
19521    const ID: u32 = 37u32;
19522    const NAME: &'static str = "MISSION_REQUEST_PARTIAL_LIST";
19523    const EXTRA_CRC: u8 = 212u8;
19524    const ENCODED_LEN: usize = 7usize;
19525    fn deser(
19526        _version: MavlinkVersion,
19527        __input: &[u8],
19528    ) -> Result<Self, ::mavlink_core::error::ParserError> {
19529        let avail_len = __input.len();
19530        let mut payload_buf = [0; Self::ENCODED_LEN];
19531        let mut buf = if avail_len < Self::ENCODED_LEN {
19532            payload_buf[0..avail_len].copy_from_slice(__input);
19533            Bytes::new(&payload_buf)
19534        } else {
19535            Bytes::new(__input)
19536        };
19537        let mut __struct = Self::default();
19538        __struct.start_index = buf.get_i16_le();
19539        __struct.end_index = buf.get_i16_le();
19540        __struct.target_system = buf.get_u8();
19541        __struct.target_component = buf.get_u8();
19542        let tmp = buf.get_u8();
19543        __struct.mission_type =
19544            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
19545                enum_type: "MavMissionType",
19546                value: tmp as u32,
19547            })?;
19548        Ok(__struct)
19549    }
19550    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
19551        let mut __tmp = BytesMut::new(bytes);
19552        #[allow(clippy::absurd_extreme_comparisons)]
19553        #[allow(unused_comparisons)]
19554        if __tmp.remaining() < Self::ENCODED_LEN {
19555            panic!(
19556                "buffer is too small (need {} bytes, but got {})",
19557                Self::ENCODED_LEN,
19558                __tmp.remaining(),
19559            )
19560        }
19561        __tmp.put_i16_le(self.start_index);
19562        __tmp.put_i16_le(self.end_index);
19563        __tmp.put_u8(self.target_system);
19564        __tmp.put_u8(self.target_component);
19565        __tmp.put_u8(self.mission_type as u8);
19566        if matches!(version, MavlinkVersion::V2) {
19567            let len = __tmp.len();
19568            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
19569        } else {
19570            __tmp.len()
19571        }
19572    }
19573}
19574#[deprecated = " See `MAV_CMD_DO_SET_MISSION_CURRENT` (Deprecated since 2022-08)"]
19575#[doc = "id: 41"]
19576#[doc = "Set the mission item with sequence number seq as the current item and emit MISSION_CURRENT (whether or not the mission number changed).         If a mission is currently being executed, the system will continue to this new mission item on the shortest path, skipping any intermediate mission items.         Note that mission jump repeat counters are not reset (see MAV_CMD_DO_JUMP param2).          This message may trigger a mission state-machine change on some systems: for example from MISSION_STATE_NOT_STARTED or MISSION_STATE_PAUSED to MISSION_STATE_ACTIVE.         If the system is in mission mode, on those systems this command might therefore start, restart or resume the mission.         If the system is not in mission mode this message must not trigger a switch to mission mode."]
19577#[derive(Debug, Clone, PartialEq)]
19578#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19579#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19580pub struct MISSION_SET_CURRENT_DATA {
19581    #[doc = "Sequence"]
19582    pub seq: u16,
19583    #[doc = "System ID"]
19584    pub target_system: u8,
19585    #[doc = "Component ID"]
19586    pub target_component: u8,
19587}
19588impl MISSION_SET_CURRENT_DATA {
19589    pub const ENCODED_LEN: usize = 4usize;
19590    pub const DEFAULT: Self = Self {
19591        seq: 0_u16,
19592        target_system: 0_u8,
19593        target_component: 0_u8,
19594    };
19595    #[cfg(feature = "arbitrary")]
19596    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
19597        use arbitrary::{Arbitrary, Unstructured};
19598        let mut buf = [0u8; 1024];
19599        rng.fill_bytes(&mut buf);
19600        let mut unstructured = Unstructured::new(&buf);
19601        Self::arbitrary(&mut unstructured).unwrap_or_default()
19602    }
19603}
19604impl Default for MISSION_SET_CURRENT_DATA {
19605    fn default() -> Self {
19606        Self::DEFAULT.clone()
19607    }
19608}
19609impl MessageData for MISSION_SET_CURRENT_DATA {
19610    type Message = MavMessage;
19611    const ID: u32 = 41u32;
19612    const NAME: &'static str = "MISSION_SET_CURRENT";
19613    const EXTRA_CRC: u8 = 28u8;
19614    const ENCODED_LEN: usize = 4usize;
19615    fn deser(
19616        _version: MavlinkVersion,
19617        __input: &[u8],
19618    ) -> Result<Self, ::mavlink_core::error::ParserError> {
19619        let avail_len = __input.len();
19620        let mut payload_buf = [0; Self::ENCODED_LEN];
19621        let mut buf = if avail_len < Self::ENCODED_LEN {
19622            payload_buf[0..avail_len].copy_from_slice(__input);
19623            Bytes::new(&payload_buf)
19624        } else {
19625            Bytes::new(__input)
19626        };
19627        let mut __struct = Self::default();
19628        __struct.seq = buf.get_u16_le();
19629        __struct.target_system = buf.get_u8();
19630        __struct.target_component = buf.get_u8();
19631        Ok(__struct)
19632    }
19633    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
19634        let mut __tmp = BytesMut::new(bytes);
19635        #[allow(clippy::absurd_extreme_comparisons)]
19636        #[allow(unused_comparisons)]
19637        if __tmp.remaining() < Self::ENCODED_LEN {
19638            panic!(
19639                "buffer is too small (need {} bytes, but got {})",
19640                Self::ENCODED_LEN,
19641                __tmp.remaining(),
19642            )
19643        }
19644        __tmp.put_u16_le(self.seq);
19645        __tmp.put_u8(self.target_system);
19646        __tmp.put_u8(self.target_component);
19647        if matches!(version, MavlinkVersion::V2) {
19648            let len = __tmp.len();
19649            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
19650        } else {
19651            __tmp.len()
19652        }
19653    }
19654}
19655#[doc = "id: 38"]
19656#[doc = "This message is sent to the MAV to write a partial list. If start index == end index, only one item will be transmitted / updated. If the start index is NOT 0 and above the current list size, this request should be REJECTED!."]
19657#[derive(Debug, Clone, PartialEq)]
19658#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19659#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19660pub struct MISSION_WRITE_PARTIAL_LIST_DATA {
19661    #[doc = "Start index. Must be smaller / equal to the largest index of the current onboard list."]
19662    pub start_index: i16,
19663    #[doc = "End index, equal or greater than start index."]
19664    pub end_index: i16,
19665    #[doc = "System ID"]
19666    pub target_system: u8,
19667    #[doc = "Component ID"]
19668    pub target_component: u8,
19669    #[doc = "Mission type."]
19670    #[cfg_attr(feature = "serde", serde(default))]
19671    pub mission_type: MavMissionType,
19672}
19673impl MISSION_WRITE_PARTIAL_LIST_DATA {
19674    pub const ENCODED_LEN: usize = 7usize;
19675    pub const DEFAULT: Self = Self {
19676        start_index: 0_i16,
19677        end_index: 0_i16,
19678        target_system: 0_u8,
19679        target_component: 0_u8,
19680        mission_type: MavMissionType::DEFAULT,
19681    };
19682    #[cfg(feature = "arbitrary")]
19683    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
19684        use arbitrary::{Arbitrary, Unstructured};
19685        let mut buf = [0u8; 1024];
19686        rng.fill_bytes(&mut buf);
19687        let mut unstructured = Unstructured::new(&buf);
19688        Self::arbitrary(&mut unstructured).unwrap_or_default()
19689    }
19690}
19691impl Default for MISSION_WRITE_PARTIAL_LIST_DATA {
19692    fn default() -> Self {
19693        Self::DEFAULT.clone()
19694    }
19695}
19696impl MessageData for MISSION_WRITE_PARTIAL_LIST_DATA {
19697    type Message = MavMessage;
19698    const ID: u32 = 38u32;
19699    const NAME: &'static str = "MISSION_WRITE_PARTIAL_LIST";
19700    const EXTRA_CRC: u8 = 9u8;
19701    const ENCODED_LEN: usize = 7usize;
19702    fn deser(
19703        _version: MavlinkVersion,
19704        __input: &[u8],
19705    ) -> Result<Self, ::mavlink_core::error::ParserError> {
19706        let avail_len = __input.len();
19707        let mut payload_buf = [0; Self::ENCODED_LEN];
19708        let mut buf = if avail_len < Self::ENCODED_LEN {
19709            payload_buf[0..avail_len].copy_from_slice(__input);
19710            Bytes::new(&payload_buf)
19711        } else {
19712            Bytes::new(__input)
19713        };
19714        let mut __struct = Self::default();
19715        __struct.start_index = buf.get_i16_le();
19716        __struct.end_index = buf.get_i16_le();
19717        __struct.target_system = buf.get_u8();
19718        __struct.target_component = buf.get_u8();
19719        let tmp = buf.get_u8();
19720        __struct.mission_type =
19721            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
19722                enum_type: "MavMissionType",
19723                value: tmp as u32,
19724            })?;
19725        Ok(__struct)
19726    }
19727    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
19728        let mut __tmp = BytesMut::new(bytes);
19729        #[allow(clippy::absurd_extreme_comparisons)]
19730        #[allow(unused_comparisons)]
19731        if __tmp.remaining() < Self::ENCODED_LEN {
19732            panic!(
19733                "buffer is too small (need {} bytes, but got {})",
19734                Self::ENCODED_LEN,
19735                __tmp.remaining(),
19736            )
19737        }
19738        __tmp.put_i16_le(self.start_index);
19739        __tmp.put_i16_le(self.end_index);
19740        __tmp.put_u8(self.target_system);
19741        __tmp.put_u8(self.target_component);
19742        __tmp.put_u8(self.mission_type as u8);
19743        if matches!(version, MavlinkVersion::V2) {
19744            let len = __tmp.len();
19745            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
19746        } else {
19747            __tmp.len()
19748        }
19749    }
19750}
19751#[deprecated = "This message is being superseded by MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW. The message can still be used to communicate with legacy gimbals implementing it. See `MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW` (Deprecated since 2020-01)"]
19752#[doc = "id: 265"]
19753#[doc = "Orientation of a mount."]
19754#[derive(Debug, Clone, PartialEq)]
19755#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19756#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19757pub struct MOUNT_ORIENTATION_DATA {
19758    #[doc = "Timestamp (time since system boot)."]
19759    pub time_boot_ms: u32,
19760    #[doc = "Roll in global frame (set to NaN for invalid)."]
19761    pub roll: f32,
19762    #[doc = "Pitch in global frame (set to NaN for invalid)."]
19763    pub pitch: f32,
19764    #[doc = "Yaw relative to vehicle (set to NaN for invalid)."]
19765    pub yaw: f32,
19766    #[doc = "Yaw in absolute frame relative to Earth's North, north is 0 (set to NaN for invalid)."]
19767    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
19768    pub yaw_absolute: f32,
19769}
19770impl MOUNT_ORIENTATION_DATA {
19771    pub const ENCODED_LEN: usize = 20usize;
19772    pub const DEFAULT: Self = Self {
19773        time_boot_ms: 0_u32,
19774        roll: 0.0_f32,
19775        pitch: 0.0_f32,
19776        yaw: 0.0_f32,
19777        yaw_absolute: 0.0_f32,
19778    };
19779    #[cfg(feature = "arbitrary")]
19780    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
19781        use arbitrary::{Arbitrary, Unstructured};
19782        let mut buf = [0u8; 1024];
19783        rng.fill_bytes(&mut buf);
19784        let mut unstructured = Unstructured::new(&buf);
19785        Self::arbitrary(&mut unstructured).unwrap_or_default()
19786    }
19787}
19788impl Default for MOUNT_ORIENTATION_DATA {
19789    fn default() -> Self {
19790        Self::DEFAULT.clone()
19791    }
19792}
19793impl MessageData for MOUNT_ORIENTATION_DATA {
19794    type Message = MavMessage;
19795    const ID: u32 = 265u32;
19796    const NAME: &'static str = "MOUNT_ORIENTATION";
19797    const EXTRA_CRC: u8 = 26u8;
19798    const ENCODED_LEN: usize = 20usize;
19799    fn deser(
19800        _version: MavlinkVersion,
19801        __input: &[u8],
19802    ) -> Result<Self, ::mavlink_core::error::ParserError> {
19803        let avail_len = __input.len();
19804        let mut payload_buf = [0; Self::ENCODED_LEN];
19805        let mut buf = if avail_len < Self::ENCODED_LEN {
19806            payload_buf[0..avail_len].copy_from_slice(__input);
19807            Bytes::new(&payload_buf)
19808        } else {
19809            Bytes::new(__input)
19810        };
19811        let mut __struct = Self::default();
19812        __struct.time_boot_ms = buf.get_u32_le();
19813        __struct.roll = buf.get_f32_le();
19814        __struct.pitch = buf.get_f32_le();
19815        __struct.yaw = buf.get_f32_le();
19816        __struct.yaw_absolute = buf.get_f32_le();
19817        Ok(__struct)
19818    }
19819    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
19820        let mut __tmp = BytesMut::new(bytes);
19821        #[allow(clippy::absurd_extreme_comparisons)]
19822        #[allow(unused_comparisons)]
19823        if __tmp.remaining() < Self::ENCODED_LEN {
19824            panic!(
19825                "buffer is too small (need {} bytes, but got {})",
19826                Self::ENCODED_LEN,
19827                __tmp.remaining(),
19828            )
19829        }
19830        __tmp.put_u32_le(self.time_boot_ms);
19831        __tmp.put_f32_le(self.roll);
19832        __tmp.put_f32_le(self.pitch);
19833        __tmp.put_f32_le(self.yaw);
19834        __tmp.put_f32_le(self.yaw_absolute);
19835        if matches!(version, MavlinkVersion::V2) {
19836            let len = __tmp.len();
19837            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
19838        } else {
19839            __tmp.len()
19840        }
19841    }
19842}
19843#[doc = "id: 251"]
19844#[doc = "Send a key-value pair as float. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output."]
19845#[derive(Debug, Clone, PartialEq)]
19846#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19847#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19848pub struct NAMED_VALUE_FLOAT_DATA {
19849    #[doc = "Timestamp (time since system boot)."]
19850    pub time_boot_ms: u32,
19851    #[doc = "Floating point value"]
19852    pub value: f32,
19853    #[doc = "Name of the debug variable"]
19854    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
19855    pub name: [u8; 10],
19856}
19857impl NAMED_VALUE_FLOAT_DATA {
19858    pub const ENCODED_LEN: usize = 18usize;
19859    pub const DEFAULT: Self = Self {
19860        time_boot_ms: 0_u32,
19861        value: 0.0_f32,
19862        name: [0_u8; 10usize],
19863    };
19864    #[cfg(feature = "arbitrary")]
19865    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
19866        use arbitrary::{Arbitrary, Unstructured};
19867        let mut buf = [0u8; 1024];
19868        rng.fill_bytes(&mut buf);
19869        let mut unstructured = Unstructured::new(&buf);
19870        Self::arbitrary(&mut unstructured).unwrap_or_default()
19871    }
19872}
19873impl Default for NAMED_VALUE_FLOAT_DATA {
19874    fn default() -> Self {
19875        Self::DEFAULT.clone()
19876    }
19877}
19878impl MessageData for NAMED_VALUE_FLOAT_DATA {
19879    type Message = MavMessage;
19880    const ID: u32 = 251u32;
19881    const NAME: &'static str = "NAMED_VALUE_FLOAT";
19882    const EXTRA_CRC: u8 = 170u8;
19883    const ENCODED_LEN: usize = 18usize;
19884    fn deser(
19885        _version: MavlinkVersion,
19886        __input: &[u8],
19887    ) -> Result<Self, ::mavlink_core::error::ParserError> {
19888        let avail_len = __input.len();
19889        let mut payload_buf = [0; Self::ENCODED_LEN];
19890        let mut buf = if avail_len < Self::ENCODED_LEN {
19891            payload_buf[0..avail_len].copy_from_slice(__input);
19892            Bytes::new(&payload_buf)
19893        } else {
19894            Bytes::new(__input)
19895        };
19896        let mut __struct = Self::default();
19897        __struct.time_boot_ms = buf.get_u32_le();
19898        __struct.value = buf.get_f32_le();
19899        for v in &mut __struct.name {
19900            let val = buf.get_u8();
19901            *v = val;
19902        }
19903        Ok(__struct)
19904    }
19905    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
19906        let mut __tmp = BytesMut::new(bytes);
19907        #[allow(clippy::absurd_extreme_comparisons)]
19908        #[allow(unused_comparisons)]
19909        if __tmp.remaining() < Self::ENCODED_LEN {
19910            panic!(
19911                "buffer is too small (need {} bytes, but got {})",
19912                Self::ENCODED_LEN,
19913                __tmp.remaining(),
19914            )
19915        }
19916        __tmp.put_u32_le(self.time_boot_ms);
19917        __tmp.put_f32_le(self.value);
19918        for val in &self.name {
19919            __tmp.put_u8(*val);
19920        }
19921        if matches!(version, MavlinkVersion::V2) {
19922            let len = __tmp.len();
19923            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
19924        } else {
19925            __tmp.len()
19926        }
19927    }
19928}
19929#[doc = "id: 252"]
19930#[doc = "Send a key-value pair as integer. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output."]
19931#[derive(Debug, Clone, PartialEq)]
19932#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19933#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19934pub struct NAMED_VALUE_INT_DATA {
19935    #[doc = "Timestamp (time since system boot)."]
19936    pub time_boot_ms: u32,
19937    #[doc = "Signed integer value"]
19938    pub value: i32,
19939    #[doc = "Name of the debug variable"]
19940    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
19941    pub name: [u8; 10],
19942}
19943impl NAMED_VALUE_INT_DATA {
19944    pub const ENCODED_LEN: usize = 18usize;
19945    pub const DEFAULT: Self = Self {
19946        time_boot_ms: 0_u32,
19947        value: 0_i32,
19948        name: [0_u8; 10usize],
19949    };
19950    #[cfg(feature = "arbitrary")]
19951    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
19952        use arbitrary::{Arbitrary, Unstructured};
19953        let mut buf = [0u8; 1024];
19954        rng.fill_bytes(&mut buf);
19955        let mut unstructured = Unstructured::new(&buf);
19956        Self::arbitrary(&mut unstructured).unwrap_or_default()
19957    }
19958}
19959impl Default for NAMED_VALUE_INT_DATA {
19960    fn default() -> Self {
19961        Self::DEFAULT.clone()
19962    }
19963}
19964impl MessageData for NAMED_VALUE_INT_DATA {
19965    type Message = MavMessage;
19966    const ID: u32 = 252u32;
19967    const NAME: &'static str = "NAMED_VALUE_INT";
19968    const EXTRA_CRC: u8 = 44u8;
19969    const ENCODED_LEN: usize = 18usize;
19970    fn deser(
19971        _version: MavlinkVersion,
19972        __input: &[u8],
19973    ) -> Result<Self, ::mavlink_core::error::ParserError> {
19974        let avail_len = __input.len();
19975        let mut payload_buf = [0; Self::ENCODED_LEN];
19976        let mut buf = if avail_len < Self::ENCODED_LEN {
19977            payload_buf[0..avail_len].copy_from_slice(__input);
19978            Bytes::new(&payload_buf)
19979        } else {
19980            Bytes::new(__input)
19981        };
19982        let mut __struct = Self::default();
19983        __struct.time_boot_ms = buf.get_u32_le();
19984        __struct.value = buf.get_i32_le();
19985        for v in &mut __struct.name {
19986            let val = buf.get_u8();
19987            *v = val;
19988        }
19989        Ok(__struct)
19990    }
19991    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
19992        let mut __tmp = BytesMut::new(bytes);
19993        #[allow(clippy::absurd_extreme_comparisons)]
19994        #[allow(unused_comparisons)]
19995        if __tmp.remaining() < Self::ENCODED_LEN {
19996            panic!(
19997                "buffer is too small (need {} bytes, but got {})",
19998                Self::ENCODED_LEN,
19999                __tmp.remaining(),
20000            )
20001        }
20002        __tmp.put_u32_le(self.time_boot_ms);
20003        __tmp.put_i32_le(self.value);
20004        for val in &self.name {
20005            __tmp.put_u8(*val);
20006        }
20007        if matches!(version, MavlinkVersion::V2) {
20008            let len = __tmp.len();
20009            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
20010        } else {
20011            __tmp.len()
20012        }
20013    }
20014}
20015#[doc = "id: 62"]
20016#[doc = "The state of the navigation and position controller."]
20017#[derive(Debug, Clone, PartialEq)]
20018#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
20019#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20020pub struct NAV_CONTROLLER_OUTPUT_DATA {
20021    #[doc = "Current desired roll"]
20022    pub nav_roll: f32,
20023    #[doc = "Current desired pitch"]
20024    pub nav_pitch: f32,
20025    #[doc = "Current altitude error"]
20026    pub alt_error: f32,
20027    #[doc = "Current airspeed error"]
20028    pub aspd_error: f32,
20029    #[doc = "Current crosstrack error on x-y plane"]
20030    pub xtrack_error: f32,
20031    #[doc = "Current desired heading"]
20032    pub nav_bearing: i16,
20033    #[doc = "Bearing to current waypoint/target"]
20034    pub target_bearing: i16,
20035    #[doc = "Distance to active waypoint"]
20036    pub wp_dist: u16,
20037}
20038impl NAV_CONTROLLER_OUTPUT_DATA {
20039    pub const ENCODED_LEN: usize = 26usize;
20040    pub const DEFAULT: Self = Self {
20041        nav_roll: 0.0_f32,
20042        nav_pitch: 0.0_f32,
20043        alt_error: 0.0_f32,
20044        aspd_error: 0.0_f32,
20045        xtrack_error: 0.0_f32,
20046        nav_bearing: 0_i16,
20047        target_bearing: 0_i16,
20048        wp_dist: 0_u16,
20049    };
20050    #[cfg(feature = "arbitrary")]
20051    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
20052        use arbitrary::{Arbitrary, Unstructured};
20053        let mut buf = [0u8; 1024];
20054        rng.fill_bytes(&mut buf);
20055        let mut unstructured = Unstructured::new(&buf);
20056        Self::arbitrary(&mut unstructured).unwrap_or_default()
20057    }
20058}
20059impl Default for NAV_CONTROLLER_OUTPUT_DATA {
20060    fn default() -> Self {
20061        Self::DEFAULT.clone()
20062    }
20063}
20064impl MessageData for NAV_CONTROLLER_OUTPUT_DATA {
20065    type Message = MavMessage;
20066    const ID: u32 = 62u32;
20067    const NAME: &'static str = "NAV_CONTROLLER_OUTPUT";
20068    const EXTRA_CRC: u8 = 183u8;
20069    const ENCODED_LEN: usize = 26usize;
20070    fn deser(
20071        _version: MavlinkVersion,
20072        __input: &[u8],
20073    ) -> Result<Self, ::mavlink_core::error::ParserError> {
20074        let avail_len = __input.len();
20075        let mut payload_buf = [0; Self::ENCODED_LEN];
20076        let mut buf = if avail_len < Self::ENCODED_LEN {
20077            payload_buf[0..avail_len].copy_from_slice(__input);
20078            Bytes::new(&payload_buf)
20079        } else {
20080            Bytes::new(__input)
20081        };
20082        let mut __struct = Self::default();
20083        __struct.nav_roll = buf.get_f32_le();
20084        __struct.nav_pitch = buf.get_f32_le();
20085        __struct.alt_error = buf.get_f32_le();
20086        __struct.aspd_error = buf.get_f32_le();
20087        __struct.xtrack_error = buf.get_f32_le();
20088        __struct.nav_bearing = buf.get_i16_le();
20089        __struct.target_bearing = buf.get_i16_le();
20090        __struct.wp_dist = buf.get_u16_le();
20091        Ok(__struct)
20092    }
20093    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
20094        let mut __tmp = BytesMut::new(bytes);
20095        #[allow(clippy::absurd_extreme_comparisons)]
20096        #[allow(unused_comparisons)]
20097        if __tmp.remaining() < Self::ENCODED_LEN {
20098            panic!(
20099                "buffer is too small (need {} bytes, but got {})",
20100                Self::ENCODED_LEN,
20101                __tmp.remaining(),
20102            )
20103        }
20104        __tmp.put_f32_le(self.nav_roll);
20105        __tmp.put_f32_le(self.nav_pitch);
20106        __tmp.put_f32_le(self.alt_error);
20107        __tmp.put_f32_le(self.aspd_error);
20108        __tmp.put_f32_le(self.xtrack_error);
20109        __tmp.put_i16_le(self.nav_bearing);
20110        __tmp.put_i16_le(self.target_bearing);
20111        __tmp.put_u16_le(self.wp_dist);
20112        if matches!(version, MavlinkVersion::V2) {
20113            let len = __tmp.len();
20114            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
20115        } else {
20116            __tmp.len()
20117        }
20118    }
20119}
20120#[doc = "id: 330"]
20121#[doc = "Obstacle distances in front of the sensor, starting from the left in increment degrees to the right."]
20122#[derive(Debug, Clone, PartialEq)]
20123#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
20124#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20125pub struct OBSTACLE_DISTANCE_DATA {
20126    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
20127    pub time_usec: u64,
20128    #[doc = "Distance of obstacles around the vehicle with index 0 corresponding to north + angle_offset, unless otherwise specified in the frame. A value of 0 is valid and means that the obstacle is practically touching the sensor. A value of max_distance +1 means no obstacle is present. A value of UINT16_MAX for unknown/not used. In a array element, one unit corresponds to 1cm."]
20129    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20130    pub distances: [u16; 72],
20131    #[doc = "Minimum distance the sensor can measure."]
20132    pub min_distance: u16,
20133    #[doc = "Maximum distance the sensor can measure."]
20134    pub max_distance: u16,
20135    #[doc = "Class id of the distance sensor type."]
20136    pub sensor_type: MavDistanceSensor,
20137    #[doc = "Angular width in degrees of each array element. Increment direction is clockwise. This field is ignored if increment_f is non-zero."]
20138    pub increment: u8,
20139    #[doc = "Angular width in degrees of each array element as a float. If non-zero then this value is used instead of the uint8_t increment field. Positive is clockwise direction, negative is counter-clockwise."]
20140    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
20141    pub increment_f: f32,
20142    #[doc = "Relative angle offset of the 0-index element in the distances array. Value of 0 corresponds to forward. Positive is clockwise direction, negative is counter-clockwise."]
20143    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
20144    pub angle_offset: f32,
20145    #[doc = "Coordinate frame of reference for the yaw rotation and offset of the sensor data. Defaults to MAV_FRAME_GLOBAL, which is north aligned. For body-mounted sensors use MAV_FRAME_BODY_FRD, which is vehicle front aligned."]
20146    #[cfg_attr(feature = "serde", serde(default))]
20147    pub frame: MavFrame,
20148}
20149impl OBSTACLE_DISTANCE_DATA {
20150    pub const ENCODED_LEN: usize = 167usize;
20151    pub const DEFAULT: Self = Self {
20152        time_usec: 0_u64,
20153        distances: [0_u16; 72usize],
20154        min_distance: 0_u16,
20155        max_distance: 0_u16,
20156        sensor_type: MavDistanceSensor::DEFAULT,
20157        increment: 0_u8,
20158        increment_f: 0.0_f32,
20159        angle_offset: 0.0_f32,
20160        frame: MavFrame::DEFAULT,
20161    };
20162    #[cfg(feature = "arbitrary")]
20163    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
20164        use arbitrary::{Arbitrary, Unstructured};
20165        let mut buf = [0u8; 1024];
20166        rng.fill_bytes(&mut buf);
20167        let mut unstructured = Unstructured::new(&buf);
20168        Self::arbitrary(&mut unstructured).unwrap_or_default()
20169    }
20170}
20171impl Default for OBSTACLE_DISTANCE_DATA {
20172    fn default() -> Self {
20173        Self::DEFAULT.clone()
20174    }
20175}
20176impl MessageData for OBSTACLE_DISTANCE_DATA {
20177    type Message = MavMessage;
20178    const ID: u32 = 330u32;
20179    const NAME: &'static str = "OBSTACLE_DISTANCE";
20180    const EXTRA_CRC: u8 = 23u8;
20181    const ENCODED_LEN: usize = 167usize;
20182    fn deser(
20183        _version: MavlinkVersion,
20184        __input: &[u8],
20185    ) -> Result<Self, ::mavlink_core::error::ParserError> {
20186        let avail_len = __input.len();
20187        let mut payload_buf = [0; Self::ENCODED_LEN];
20188        let mut buf = if avail_len < Self::ENCODED_LEN {
20189            payload_buf[0..avail_len].copy_from_slice(__input);
20190            Bytes::new(&payload_buf)
20191        } else {
20192            Bytes::new(__input)
20193        };
20194        let mut __struct = Self::default();
20195        __struct.time_usec = buf.get_u64_le();
20196        for v in &mut __struct.distances {
20197            let val = buf.get_u16_le();
20198            *v = val;
20199        }
20200        __struct.min_distance = buf.get_u16_le();
20201        __struct.max_distance = buf.get_u16_le();
20202        let tmp = buf.get_u8();
20203        __struct.sensor_type =
20204            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
20205                enum_type: "MavDistanceSensor",
20206                value: tmp as u32,
20207            })?;
20208        __struct.increment = buf.get_u8();
20209        __struct.increment_f = buf.get_f32_le();
20210        __struct.angle_offset = buf.get_f32_le();
20211        let tmp = buf.get_u8();
20212        __struct.frame =
20213            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
20214                enum_type: "MavFrame",
20215                value: tmp as u32,
20216            })?;
20217        Ok(__struct)
20218    }
20219    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
20220        let mut __tmp = BytesMut::new(bytes);
20221        #[allow(clippy::absurd_extreme_comparisons)]
20222        #[allow(unused_comparisons)]
20223        if __tmp.remaining() < Self::ENCODED_LEN {
20224            panic!(
20225                "buffer is too small (need {} bytes, but got {})",
20226                Self::ENCODED_LEN,
20227                __tmp.remaining(),
20228            )
20229        }
20230        __tmp.put_u64_le(self.time_usec);
20231        for val in &self.distances {
20232            __tmp.put_u16_le(*val);
20233        }
20234        __tmp.put_u16_le(self.min_distance);
20235        __tmp.put_u16_le(self.max_distance);
20236        __tmp.put_u8(self.sensor_type as u8);
20237        __tmp.put_u8(self.increment);
20238        __tmp.put_f32_le(self.increment_f);
20239        __tmp.put_f32_le(self.angle_offset);
20240        __tmp.put_u8(self.frame as u8);
20241        if matches!(version, MavlinkVersion::V2) {
20242            let len = __tmp.len();
20243            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
20244        } else {
20245            __tmp.len()
20246        }
20247    }
20248}
20249#[doc = "id: 331"]
20250#[doc = "Odometry message to communicate odometry information with an external interface. Fits ROS REP 147 standard for aerial vehicles (<http://www.ros.org/reps/rep-0147.html>)."]
20251#[derive(Debug, Clone, PartialEq)]
20252#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
20253#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20254pub struct ODOMETRY_DATA {
20255    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
20256    pub time_usec: u64,
20257    #[doc = "X Position"]
20258    pub x: f32,
20259    #[doc = "Y Position"]
20260    pub y: f32,
20261    #[doc = "Z Position"]
20262    pub z: f32,
20263    #[doc = "Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation)"]
20264    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20265    pub q: [f32; 4],
20266    #[doc = "X linear speed"]
20267    pub vx: f32,
20268    #[doc = "Y linear speed"]
20269    pub vy: f32,
20270    #[doc = "Z linear speed"]
20271    pub vz: f32,
20272    #[doc = "Roll angular speed"]
20273    pub rollspeed: f32,
20274    #[doc = "Pitch angular speed"]
20275    pub pitchspeed: f32,
20276    #[doc = "Yaw angular speed"]
20277    pub yawspeed: f32,
20278    #[doc = "Row-major representation of a 6x6 pose cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array."]
20279    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20280    pub pose_covariance: [f32; 21],
20281    #[doc = "Row-major representation of a 6x6 velocity cross-covariance matrix upper right triangle (states: vx, vy, vz, rollspeed, pitchspeed, yawspeed; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array."]
20282    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20283    pub velocity_covariance: [f32; 21],
20284    #[doc = "Coordinate frame of reference for the pose data."]
20285    pub frame_id: MavFrame,
20286    #[doc = "Coordinate frame of reference for the velocity in free space (twist) data."]
20287    pub child_frame_id: MavFrame,
20288    #[doc = "Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps."]
20289    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
20290    pub reset_counter: u8,
20291    #[doc = "Type of estimator that is providing the odometry."]
20292    #[cfg_attr(feature = "serde", serde(default))]
20293    pub estimator_type: MavEstimatorType,
20294    #[doc = "Optional odometry quality metric as a percentage. -1 = odometry has failed, 0 = unknown/unset quality, 1 = worst quality, 100 = best quality"]
20295    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
20296    pub quality: i8,
20297}
20298impl ODOMETRY_DATA {
20299    pub const ENCODED_LEN: usize = 233usize;
20300    pub const DEFAULT: Self = Self {
20301        time_usec: 0_u64,
20302        x: 0.0_f32,
20303        y: 0.0_f32,
20304        z: 0.0_f32,
20305        q: [0.0_f32; 4usize],
20306        vx: 0.0_f32,
20307        vy: 0.0_f32,
20308        vz: 0.0_f32,
20309        rollspeed: 0.0_f32,
20310        pitchspeed: 0.0_f32,
20311        yawspeed: 0.0_f32,
20312        pose_covariance: [0.0_f32; 21usize],
20313        velocity_covariance: [0.0_f32; 21usize],
20314        frame_id: MavFrame::DEFAULT,
20315        child_frame_id: MavFrame::DEFAULT,
20316        reset_counter: 0_u8,
20317        estimator_type: MavEstimatorType::DEFAULT,
20318        quality: 0_i8,
20319    };
20320    #[cfg(feature = "arbitrary")]
20321    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
20322        use arbitrary::{Arbitrary, Unstructured};
20323        let mut buf = [0u8; 1024];
20324        rng.fill_bytes(&mut buf);
20325        let mut unstructured = Unstructured::new(&buf);
20326        Self::arbitrary(&mut unstructured).unwrap_or_default()
20327    }
20328}
20329impl Default for ODOMETRY_DATA {
20330    fn default() -> Self {
20331        Self::DEFAULT.clone()
20332    }
20333}
20334impl MessageData for ODOMETRY_DATA {
20335    type Message = MavMessage;
20336    const ID: u32 = 331u32;
20337    const NAME: &'static str = "ODOMETRY";
20338    const EXTRA_CRC: u8 = 91u8;
20339    const ENCODED_LEN: usize = 233usize;
20340    fn deser(
20341        _version: MavlinkVersion,
20342        __input: &[u8],
20343    ) -> Result<Self, ::mavlink_core::error::ParserError> {
20344        let avail_len = __input.len();
20345        let mut payload_buf = [0; Self::ENCODED_LEN];
20346        let mut buf = if avail_len < Self::ENCODED_LEN {
20347            payload_buf[0..avail_len].copy_from_slice(__input);
20348            Bytes::new(&payload_buf)
20349        } else {
20350            Bytes::new(__input)
20351        };
20352        let mut __struct = Self::default();
20353        __struct.time_usec = buf.get_u64_le();
20354        __struct.x = buf.get_f32_le();
20355        __struct.y = buf.get_f32_le();
20356        __struct.z = buf.get_f32_le();
20357        for v in &mut __struct.q {
20358            let val = buf.get_f32_le();
20359            *v = val;
20360        }
20361        __struct.vx = buf.get_f32_le();
20362        __struct.vy = buf.get_f32_le();
20363        __struct.vz = buf.get_f32_le();
20364        __struct.rollspeed = buf.get_f32_le();
20365        __struct.pitchspeed = buf.get_f32_le();
20366        __struct.yawspeed = buf.get_f32_le();
20367        for v in &mut __struct.pose_covariance {
20368            let val = buf.get_f32_le();
20369            *v = val;
20370        }
20371        for v in &mut __struct.velocity_covariance {
20372            let val = buf.get_f32_le();
20373            *v = val;
20374        }
20375        let tmp = buf.get_u8();
20376        __struct.frame_id =
20377            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
20378                enum_type: "MavFrame",
20379                value: tmp as u32,
20380            })?;
20381        let tmp = buf.get_u8();
20382        __struct.child_frame_id =
20383            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
20384                enum_type: "MavFrame",
20385                value: tmp as u32,
20386            })?;
20387        __struct.reset_counter = buf.get_u8();
20388        let tmp = buf.get_u8();
20389        __struct.estimator_type =
20390            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
20391                enum_type: "MavEstimatorType",
20392                value: tmp as u32,
20393            })?;
20394        __struct.quality = buf.get_i8();
20395        Ok(__struct)
20396    }
20397    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
20398        let mut __tmp = BytesMut::new(bytes);
20399        #[allow(clippy::absurd_extreme_comparisons)]
20400        #[allow(unused_comparisons)]
20401        if __tmp.remaining() < Self::ENCODED_LEN {
20402            panic!(
20403                "buffer is too small (need {} bytes, but got {})",
20404                Self::ENCODED_LEN,
20405                __tmp.remaining(),
20406            )
20407        }
20408        __tmp.put_u64_le(self.time_usec);
20409        __tmp.put_f32_le(self.x);
20410        __tmp.put_f32_le(self.y);
20411        __tmp.put_f32_le(self.z);
20412        for val in &self.q {
20413            __tmp.put_f32_le(*val);
20414        }
20415        __tmp.put_f32_le(self.vx);
20416        __tmp.put_f32_le(self.vy);
20417        __tmp.put_f32_le(self.vz);
20418        __tmp.put_f32_le(self.rollspeed);
20419        __tmp.put_f32_le(self.pitchspeed);
20420        __tmp.put_f32_le(self.yawspeed);
20421        for val in &self.pose_covariance {
20422            __tmp.put_f32_le(*val);
20423        }
20424        for val in &self.velocity_covariance {
20425            __tmp.put_f32_le(*val);
20426        }
20427        __tmp.put_u8(self.frame_id as u8);
20428        __tmp.put_u8(self.child_frame_id as u8);
20429        __tmp.put_u8(self.reset_counter);
20430        __tmp.put_u8(self.estimator_type as u8);
20431        __tmp.put_i8(self.quality);
20432        if matches!(version, MavlinkVersion::V2) {
20433            let len = __tmp.len();
20434            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
20435        } else {
20436            __tmp.len()
20437        }
20438    }
20439}
20440#[doc = "id: 390"]
20441#[doc = "Hardware status sent by an onboard computer."]
20442#[derive(Debug, Clone, PartialEq)]
20443#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
20444#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20445pub struct ONBOARD_COMPUTER_STATUS_DATA {
20446    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
20447    pub time_usec: u64,
20448    #[doc = "Time since system boot."]
20449    pub uptime: u32,
20450    #[doc = "Amount of used RAM on the component system. A value of UINT32_MAX implies the field is unused."]
20451    pub ram_usage: u32,
20452    #[doc = "Total amount of RAM on the component system. A value of UINT32_MAX implies the field is unused."]
20453    pub ram_total: u32,
20454    #[doc = "Storage type: 0: HDD, 1: SSD, 2: EMMC, 3: SD card (non-removable), 4: SD card (removable). A value of UINT32_MAX implies the field is unused."]
20455    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20456    pub storage_type: [u32; 4],
20457    #[doc = "Amount of used storage space on the component system. A value of UINT32_MAX implies the field is unused."]
20458    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20459    pub storage_usage: [u32; 4],
20460    #[doc = "Total amount of storage space on the component system. A value of UINT32_MAX implies the field is unused."]
20461    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20462    pub storage_total: [u32; 4],
20463    #[doc = "Link type: 0-9: UART, 10-19: Wired network, 20-29: Wifi, 30-39: Point-to-point proprietary, 40-49: Mesh proprietary"]
20464    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20465    pub link_type: [u32; 6],
20466    #[doc = "Network traffic from the component system. A value of UINT32_MAX implies the field is unused."]
20467    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20468    pub link_tx_rate: [u32; 6],
20469    #[doc = "Network traffic to the component system. A value of UINT32_MAX implies the field is unused."]
20470    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20471    pub link_rx_rate: [u32; 6],
20472    #[doc = "Network capacity from the component system. A value of UINT32_MAX implies the field is unused."]
20473    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20474    pub link_tx_max: [u32; 6],
20475    #[doc = "Network capacity to the component system. A value of UINT32_MAX implies the field is unused."]
20476    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20477    pub link_rx_max: [u32; 6],
20478    #[doc = "Fan speeds. A value of INT16_MAX implies the field is unused."]
20479    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20480    pub fan_speed: [i16; 4],
20481    #[doc = "Type of the onboard computer: 0: Mission computer primary, 1: Mission computer backup 1, 2: Mission computer backup 2, 3: Compute node, 4-5: Compute spares, 6-9: Payload computers."]
20482    pub mavtype: u8,
20483    #[doc = "CPU usage on the component in percent (100 - idle). A value of UINT8_MAX implies the field is unused."]
20484    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20485    pub cpu_cores: [u8; 8],
20486    #[doc = "Combined CPU usage as the last 10 slices of 100 MS (a histogram). This allows to identify spikes in load that max out the system, but only for a short amount of time. A value of UINT8_MAX implies the field is unused."]
20487    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20488    pub cpu_combined: [u8; 10],
20489    #[doc = "GPU usage on the component in percent (100 - idle). A value of UINT8_MAX implies the field is unused."]
20490    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20491    pub gpu_cores: [u8; 4],
20492    #[doc = "Combined GPU usage as the last 10 slices of 100 MS (a histogram). This allows to identify spikes in load that max out the system, but only for a short amount of time. A value of UINT8_MAX implies the field is unused."]
20493    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20494    pub gpu_combined: [u8; 10],
20495    #[doc = "Temperature of the board. A value of INT8_MAX implies the field is unused."]
20496    pub temperature_board: i8,
20497    #[doc = "Temperature of the CPU core. A value of INT8_MAX implies the field is unused."]
20498    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20499    pub temperature_core: [i8; 8],
20500}
20501impl ONBOARD_COMPUTER_STATUS_DATA {
20502    pub const ENCODED_LEN: usize = 238usize;
20503    pub const DEFAULT: Self = Self {
20504        time_usec: 0_u64,
20505        uptime: 0_u32,
20506        ram_usage: 0_u32,
20507        ram_total: 0_u32,
20508        storage_type: [0_u32; 4usize],
20509        storage_usage: [0_u32; 4usize],
20510        storage_total: [0_u32; 4usize],
20511        link_type: [0_u32; 6usize],
20512        link_tx_rate: [0_u32; 6usize],
20513        link_rx_rate: [0_u32; 6usize],
20514        link_tx_max: [0_u32; 6usize],
20515        link_rx_max: [0_u32; 6usize],
20516        fan_speed: [0_i16; 4usize],
20517        mavtype: 0_u8,
20518        cpu_cores: [0_u8; 8usize],
20519        cpu_combined: [0_u8; 10usize],
20520        gpu_cores: [0_u8; 4usize],
20521        gpu_combined: [0_u8; 10usize],
20522        temperature_board: 0_i8,
20523        temperature_core: [0_i8; 8usize],
20524    };
20525    #[cfg(feature = "arbitrary")]
20526    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
20527        use arbitrary::{Arbitrary, Unstructured};
20528        let mut buf = [0u8; 1024];
20529        rng.fill_bytes(&mut buf);
20530        let mut unstructured = Unstructured::new(&buf);
20531        Self::arbitrary(&mut unstructured).unwrap_or_default()
20532    }
20533}
20534impl Default for ONBOARD_COMPUTER_STATUS_DATA {
20535    fn default() -> Self {
20536        Self::DEFAULT.clone()
20537    }
20538}
20539impl MessageData for ONBOARD_COMPUTER_STATUS_DATA {
20540    type Message = MavMessage;
20541    const ID: u32 = 390u32;
20542    const NAME: &'static str = "ONBOARD_COMPUTER_STATUS";
20543    const EXTRA_CRC: u8 = 156u8;
20544    const ENCODED_LEN: usize = 238usize;
20545    fn deser(
20546        _version: MavlinkVersion,
20547        __input: &[u8],
20548    ) -> Result<Self, ::mavlink_core::error::ParserError> {
20549        let avail_len = __input.len();
20550        let mut payload_buf = [0; Self::ENCODED_LEN];
20551        let mut buf = if avail_len < Self::ENCODED_LEN {
20552            payload_buf[0..avail_len].copy_from_slice(__input);
20553            Bytes::new(&payload_buf)
20554        } else {
20555            Bytes::new(__input)
20556        };
20557        let mut __struct = Self::default();
20558        __struct.time_usec = buf.get_u64_le();
20559        __struct.uptime = buf.get_u32_le();
20560        __struct.ram_usage = buf.get_u32_le();
20561        __struct.ram_total = buf.get_u32_le();
20562        for v in &mut __struct.storage_type {
20563            let val = buf.get_u32_le();
20564            *v = val;
20565        }
20566        for v in &mut __struct.storage_usage {
20567            let val = buf.get_u32_le();
20568            *v = val;
20569        }
20570        for v in &mut __struct.storage_total {
20571            let val = buf.get_u32_le();
20572            *v = val;
20573        }
20574        for v in &mut __struct.link_type {
20575            let val = buf.get_u32_le();
20576            *v = val;
20577        }
20578        for v in &mut __struct.link_tx_rate {
20579            let val = buf.get_u32_le();
20580            *v = val;
20581        }
20582        for v in &mut __struct.link_rx_rate {
20583            let val = buf.get_u32_le();
20584            *v = val;
20585        }
20586        for v in &mut __struct.link_tx_max {
20587            let val = buf.get_u32_le();
20588            *v = val;
20589        }
20590        for v in &mut __struct.link_rx_max {
20591            let val = buf.get_u32_le();
20592            *v = val;
20593        }
20594        for v in &mut __struct.fan_speed {
20595            let val = buf.get_i16_le();
20596            *v = val;
20597        }
20598        __struct.mavtype = buf.get_u8();
20599        for v in &mut __struct.cpu_cores {
20600            let val = buf.get_u8();
20601            *v = val;
20602        }
20603        for v in &mut __struct.cpu_combined {
20604            let val = buf.get_u8();
20605            *v = val;
20606        }
20607        for v in &mut __struct.gpu_cores {
20608            let val = buf.get_u8();
20609            *v = val;
20610        }
20611        for v in &mut __struct.gpu_combined {
20612            let val = buf.get_u8();
20613            *v = val;
20614        }
20615        __struct.temperature_board = buf.get_i8();
20616        for v in &mut __struct.temperature_core {
20617            let val = buf.get_i8();
20618            *v = val;
20619        }
20620        Ok(__struct)
20621    }
20622    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
20623        let mut __tmp = BytesMut::new(bytes);
20624        #[allow(clippy::absurd_extreme_comparisons)]
20625        #[allow(unused_comparisons)]
20626        if __tmp.remaining() < Self::ENCODED_LEN {
20627            panic!(
20628                "buffer is too small (need {} bytes, but got {})",
20629                Self::ENCODED_LEN,
20630                __tmp.remaining(),
20631            )
20632        }
20633        __tmp.put_u64_le(self.time_usec);
20634        __tmp.put_u32_le(self.uptime);
20635        __tmp.put_u32_le(self.ram_usage);
20636        __tmp.put_u32_le(self.ram_total);
20637        for val in &self.storage_type {
20638            __tmp.put_u32_le(*val);
20639        }
20640        for val in &self.storage_usage {
20641            __tmp.put_u32_le(*val);
20642        }
20643        for val in &self.storage_total {
20644            __tmp.put_u32_le(*val);
20645        }
20646        for val in &self.link_type {
20647            __tmp.put_u32_le(*val);
20648        }
20649        for val in &self.link_tx_rate {
20650            __tmp.put_u32_le(*val);
20651        }
20652        for val in &self.link_rx_rate {
20653            __tmp.put_u32_le(*val);
20654        }
20655        for val in &self.link_tx_max {
20656            __tmp.put_u32_le(*val);
20657        }
20658        for val in &self.link_rx_max {
20659            __tmp.put_u32_le(*val);
20660        }
20661        for val in &self.fan_speed {
20662            __tmp.put_i16_le(*val);
20663        }
20664        __tmp.put_u8(self.mavtype);
20665        for val in &self.cpu_cores {
20666            __tmp.put_u8(*val);
20667        }
20668        for val in &self.cpu_combined {
20669            __tmp.put_u8(*val);
20670        }
20671        for val in &self.gpu_cores {
20672            __tmp.put_u8(*val);
20673        }
20674        for val in &self.gpu_combined {
20675            __tmp.put_u8(*val);
20676        }
20677        __tmp.put_i8(self.temperature_board);
20678        for val in &self.temperature_core {
20679            __tmp.put_i8(*val);
20680        }
20681        if matches!(version, MavlinkVersion::V2) {
20682            let len = __tmp.len();
20683            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
20684        } else {
20685            __tmp.len()
20686        }
20687    }
20688}
20689#[doc = "id: 12918"]
20690#[doc = "Transmitter (remote ID system) is enabled and ready to start sending location and other required information. This is streamed by transmitter. A flight controller uses it as a condition to arm."]
20691#[derive(Debug, Clone, PartialEq)]
20692#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
20693#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20694pub struct OPEN_DRONE_ID_ARM_STATUS_DATA {
20695    #[doc = "Status level indicating if arming is allowed."]
20696    pub status: MavOdidArmStatus,
20697    #[doc = "Text error message, should be empty if status is good to arm. Fill with nulls in unused portion."]
20698    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20699    pub error: [u8; 50],
20700}
20701impl OPEN_DRONE_ID_ARM_STATUS_DATA {
20702    pub const ENCODED_LEN: usize = 51usize;
20703    pub const DEFAULT: Self = Self {
20704        status: MavOdidArmStatus::DEFAULT,
20705        error: [0_u8; 50usize],
20706    };
20707    #[cfg(feature = "arbitrary")]
20708    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
20709        use arbitrary::{Arbitrary, Unstructured};
20710        let mut buf = [0u8; 1024];
20711        rng.fill_bytes(&mut buf);
20712        let mut unstructured = Unstructured::new(&buf);
20713        Self::arbitrary(&mut unstructured).unwrap_or_default()
20714    }
20715}
20716impl Default for OPEN_DRONE_ID_ARM_STATUS_DATA {
20717    fn default() -> Self {
20718        Self::DEFAULT.clone()
20719    }
20720}
20721impl MessageData for OPEN_DRONE_ID_ARM_STATUS_DATA {
20722    type Message = MavMessage;
20723    const ID: u32 = 12918u32;
20724    const NAME: &'static str = "OPEN_DRONE_ID_ARM_STATUS";
20725    const EXTRA_CRC: u8 = 139u8;
20726    const ENCODED_LEN: usize = 51usize;
20727    fn deser(
20728        _version: MavlinkVersion,
20729        __input: &[u8],
20730    ) -> Result<Self, ::mavlink_core::error::ParserError> {
20731        let avail_len = __input.len();
20732        let mut payload_buf = [0; Self::ENCODED_LEN];
20733        let mut buf = if avail_len < Self::ENCODED_LEN {
20734            payload_buf[0..avail_len].copy_from_slice(__input);
20735            Bytes::new(&payload_buf)
20736        } else {
20737            Bytes::new(__input)
20738        };
20739        let mut __struct = Self::default();
20740        let tmp = buf.get_u8();
20741        __struct.status =
20742            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
20743                enum_type: "MavOdidArmStatus",
20744                value: tmp as u32,
20745            })?;
20746        for v in &mut __struct.error {
20747            let val = buf.get_u8();
20748            *v = val;
20749        }
20750        Ok(__struct)
20751    }
20752    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
20753        let mut __tmp = BytesMut::new(bytes);
20754        #[allow(clippy::absurd_extreme_comparisons)]
20755        #[allow(unused_comparisons)]
20756        if __tmp.remaining() < Self::ENCODED_LEN {
20757            panic!(
20758                "buffer is too small (need {} bytes, but got {})",
20759                Self::ENCODED_LEN,
20760                __tmp.remaining(),
20761            )
20762        }
20763        __tmp.put_u8(self.status as u8);
20764        for val in &self.error {
20765            __tmp.put_u8(*val);
20766        }
20767        if matches!(version, MavlinkVersion::V2) {
20768            let len = __tmp.len();
20769            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
20770        } else {
20771            __tmp.len()
20772        }
20773    }
20774}
20775#[doc = "id: 12902"]
20776#[doc = "Data for filling the OpenDroneID Authentication message. The Authentication Message defines a field that can provide a means of authenticity for the identity of the UAS (Unmanned Aircraft System). The Authentication message can have two different formats. For data page 0, the fields PageCount, Length and TimeStamp are present and AuthData is only 17 bytes. For data page 1 through 15, PageCount, Length and TimeStamp are not present and the size of AuthData is 23 bytes."]
20777#[derive(Debug, Clone, PartialEq)]
20778#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
20779#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20780pub struct OPEN_DRONE_ID_AUTHENTICATION_DATA {
20781    #[doc = "This field is only present for page 0. 32 bit Unix Timestamp in seconds since 00:00:00 01/01/2019."]
20782    pub timestamp: u32,
20783    #[doc = "System ID (0 for broadcast)."]
20784    pub target_system: u8,
20785    #[doc = "Component ID (0 for broadcast)."]
20786    pub target_component: u8,
20787    #[doc = "Only used for drone ID data received from other UAs. See detailed description at <https://mavlink.io/en/services/opendroneid.html>."]
20788    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20789    pub id_or_mac: [u8; 20],
20790    #[doc = "Indicates the type of authentication."]
20791    pub authentication_type: MavOdidAuthType,
20792    #[doc = "Allowed range is 0 - 15."]
20793    pub data_page: u8,
20794    #[doc = "This field is only present for page 0. Allowed range is 0 - 15. See the description of struct ODID_Auth_data at <https://github.com/opendroneid/opendroneid-core-c/blob/master/libopendroneid/opendroneid.h>."]
20795    pub last_page_index: u8,
20796    #[doc = "This field is only present for page 0. Total bytes of authentication_data from all data pages. See the description of struct ODID_Auth_data at <https://github.com/opendroneid/opendroneid-core-c/blob/master/libopendroneid/opendroneid.h>."]
20797    pub length: u8,
20798    #[doc = "Opaque authentication data. For page 0, the size is only 17 bytes. For other pages, the size is 23 bytes. Shall be filled with nulls in the unused portion of the field."]
20799    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20800    pub authentication_data: [u8; 23],
20801}
20802impl OPEN_DRONE_ID_AUTHENTICATION_DATA {
20803    pub const ENCODED_LEN: usize = 53usize;
20804    pub const DEFAULT: Self = Self {
20805        timestamp: 0_u32,
20806        target_system: 0_u8,
20807        target_component: 0_u8,
20808        id_or_mac: [0_u8; 20usize],
20809        authentication_type: MavOdidAuthType::DEFAULT,
20810        data_page: 0_u8,
20811        last_page_index: 0_u8,
20812        length: 0_u8,
20813        authentication_data: [0_u8; 23usize],
20814    };
20815    #[cfg(feature = "arbitrary")]
20816    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
20817        use arbitrary::{Arbitrary, Unstructured};
20818        let mut buf = [0u8; 1024];
20819        rng.fill_bytes(&mut buf);
20820        let mut unstructured = Unstructured::new(&buf);
20821        Self::arbitrary(&mut unstructured).unwrap_or_default()
20822    }
20823}
20824impl Default for OPEN_DRONE_ID_AUTHENTICATION_DATA {
20825    fn default() -> Self {
20826        Self::DEFAULT.clone()
20827    }
20828}
20829impl MessageData for OPEN_DRONE_ID_AUTHENTICATION_DATA {
20830    type Message = MavMessage;
20831    const ID: u32 = 12902u32;
20832    const NAME: &'static str = "OPEN_DRONE_ID_AUTHENTICATION";
20833    const EXTRA_CRC: u8 = 140u8;
20834    const ENCODED_LEN: usize = 53usize;
20835    fn deser(
20836        _version: MavlinkVersion,
20837        __input: &[u8],
20838    ) -> Result<Self, ::mavlink_core::error::ParserError> {
20839        let avail_len = __input.len();
20840        let mut payload_buf = [0; Self::ENCODED_LEN];
20841        let mut buf = if avail_len < Self::ENCODED_LEN {
20842            payload_buf[0..avail_len].copy_from_slice(__input);
20843            Bytes::new(&payload_buf)
20844        } else {
20845            Bytes::new(__input)
20846        };
20847        let mut __struct = Self::default();
20848        __struct.timestamp = buf.get_u32_le();
20849        __struct.target_system = buf.get_u8();
20850        __struct.target_component = buf.get_u8();
20851        for v in &mut __struct.id_or_mac {
20852            let val = buf.get_u8();
20853            *v = val;
20854        }
20855        let tmp = buf.get_u8();
20856        __struct.authentication_type =
20857            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
20858                enum_type: "MavOdidAuthType",
20859                value: tmp as u32,
20860            })?;
20861        __struct.data_page = buf.get_u8();
20862        __struct.last_page_index = buf.get_u8();
20863        __struct.length = buf.get_u8();
20864        for v in &mut __struct.authentication_data {
20865            let val = buf.get_u8();
20866            *v = val;
20867        }
20868        Ok(__struct)
20869    }
20870    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
20871        let mut __tmp = BytesMut::new(bytes);
20872        #[allow(clippy::absurd_extreme_comparisons)]
20873        #[allow(unused_comparisons)]
20874        if __tmp.remaining() < Self::ENCODED_LEN {
20875            panic!(
20876                "buffer is too small (need {} bytes, but got {})",
20877                Self::ENCODED_LEN,
20878                __tmp.remaining(),
20879            )
20880        }
20881        __tmp.put_u32_le(self.timestamp);
20882        __tmp.put_u8(self.target_system);
20883        __tmp.put_u8(self.target_component);
20884        for val in &self.id_or_mac {
20885            __tmp.put_u8(*val);
20886        }
20887        __tmp.put_u8(self.authentication_type as u8);
20888        __tmp.put_u8(self.data_page);
20889        __tmp.put_u8(self.last_page_index);
20890        __tmp.put_u8(self.length);
20891        for val in &self.authentication_data {
20892            __tmp.put_u8(*val);
20893        }
20894        if matches!(version, MavlinkVersion::V2) {
20895            let len = __tmp.len();
20896            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
20897        } else {
20898            __tmp.len()
20899        }
20900    }
20901}
20902#[doc = "id: 12900"]
20903#[doc = "Data for filling the OpenDroneID Basic ID message. This and the below messages are primarily meant for feeding data to/from an OpenDroneID implementation. E.g. <https://github.com/opendroneid/opendroneid-core-c>. These messages are compatible with the ASTM F3411 Remote ID standard and the ASD-STAN prEN 4709-002 Direct Remote ID standard. Additional information and usage of these messages is documented at <https://mavlink.io/en/services/opendroneid.html>."]
20904#[derive(Debug, Clone, PartialEq)]
20905#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
20906#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20907pub struct OPEN_DRONE_ID_BASIC_ID_DATA {
20908    #[doc = "System ID (0 for broadcast)."]
20909    pub target_system: u8,
20910    #[doc = "Component ID (0 for broadcast)."]
20911    pub target_component: u8,
20912    #[doc = "Only used for drone ID data received from other UAs. See detailed description at <https://mavlink.io/en/services/opendroneid.html>."]
20913    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20914    pub id_or_mac: [u8; 20],
20915    #[doc = "Indicates the format for the uas_id field of this message."]
20916    pub id_type: MavOdidIdType,
20917    #[doc = "Indicates the type of UA (Unmanned Aircraft)."]
20918    pub ua_type: MavOdidUaType,
20919    #[doc = "UAS (Unmanned Aircraft System) ID following the format specified by id_type. Shall be filled with nulls in the unused portion of the field."]
20920    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
20921    pub uas_id: [u8; 20],
20922}
20923impl OPEN_DRONE_ID_BASIC_ID_DATA {
20924    pub const ENCODED_LEN: usize = 44usize;
20925    pub const DEFAULT: Self = Self {
20926        target_system: 0_u8,
20927        target_component: 0_u8,
20928        id_or_mac: [0_u8; 20usize],
20929        id_type: MavOdidIdType::DEFAULT,
20930        ua_type: MavOdidUaType::DEFAULT,
20931        uas_id: [0_u8; 20usize],
20932    };
20933    #[cfg(feature = "arbitrary")]
20934    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
20935        use arbitrary::{Arbitrary, Unstructured};
20936        let mut buf = [0u8; 1024];
20937        rng.fill_bytes(&mut buf);
20938        let mut unstructured = Unstructured::new(&buf);
20939        Self::arbitrary(&mut unstructured).unwrap_or_default()
20940    }
20941}
20942impl Default for OPEN_DRONE_ID_BASIC_ID_DATA {
20943    fn default() -> Self {
20944        Self::DEFAULT.clone()
20945    }
20946}
20947impl MessageData for OPEN_DRONE_ID_BASIC_ID_DATA {
20948    type Message = MavMessage;
20949    const ID: u32 = 12900u32;
20950    const NAME: &'static str = "OPEN_DRONE_ID_BASIC_ID";
20951    const EXTRA_CRC: u8 = 114u8;
20952    const ENCODED_LEN: usize = 44usize;
20953    fn deser(
20954        _version: MavlinkVersion,
20955        __input: &[u8],
20956    ) -> Result<Self, ::mavlink_core::error::ParserError> {
20957        let avail_len = __input.len();
20958        let mut payload_buf = [0; Self::ENCODED_LEN];
20959        let mut buf = if avail_len < Self::ENCODED_LEN {
20960            payload_buf[0..avail_len].copy_from_slice(__input);
20961            Bytes::new(&payload_buf)
20962        } else {
20963            Bytes::new(__input)
20964        };
20965        let mut __struct = Self::default();
20966        __struct.target_system = buf.get_u8();
20967        __struct.target_component = buf.get_u8();
20968        for v in &mut __struct.id_or_mac {
20969            let val = buf.get_u8();
20970            *v = val;
20971        }
20972        let tmp = buf.get_u8();
20973        __struct.id_type =
20974            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
20975                enum_type: "MavOdidIdType",
20976                value: tmp as u32,
20977            })?;
20978        let tmp = buf.get_u8();
20979        __struct.ua_type =
20980            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
20981                enum_type: "MavOdidUaType",
20982                value: tmp as u32,
20983            })?;
20984        for v in &mut __struct.uas_id {
20985            let val = buf.get_u8();
20986            *v = val;
20987        }
20988        Ok(__struct)
20989    }
20990    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
20991        let mut __tmp = BytesMut::new(bytes);
20992        #[allow(clippy::absurd_extreme_comparisons)]
20993        #[allow(unused_comparisons)]
20994        if __tmp.remaining() < Self::ENCODED_LEN {
20995            panic!(
20996                "buffer is too small (need {} bytes, but got {})",
20997                Self::ENCODED_LEN,
20998                __tmp.remaining(),
20999            )
21000        }
21001        __tmp.put_u8(self.target_system);
21002        __tmp.put_u8(self.target_component);
21003        for val in &self.id_or_mac {
21004            __tmp.put_u8(*val);
21005        }
21006        __tmp.put_u8(self.id_type as u8);
21007        __tmp.put_u8(self.ua_type as u8);
21008        for val in &self.uas_id {
21009            __tmp.put_u8(*val);
21010        }
21011        if matches!(version, MavlinkVersion::V2) {
21012            let len = __tmp.len();
21013            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
21014        } else {
21015            __tmp.len()
21016        }
21017    }
21018}
21019#[doc = "id: 12901"]
21020#[doc = "Data for filling the OpenDroneID Location message. The float data types are 32-bit IEEE 754. The Location message provides the location, altitude, direction and speed of the aircraft."]
21021#[derive(Debug, Clone, PartialEq)]
21022#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
21023#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21024pub struct OPEN_DRONE_ID_LOCATION_DATA {
21025    #[doc = "Current latitude of the unmanned aircraft. If unknown: 0 (both Lat/Lon)."]
21026    pub latitude: i32,
21027    #[doc = "Current longitude of the unmanned aircraft. If unknown: 0 (both Lat/Lon)."]
21028    pub longitude: i32,
21029    #[doc = "The altitude calculated from the barometric pressue. Reference is against 29.92inHg or 1013.2mb. If unknown: -1000 m."]
21030    pub altitude_barometric: f32,
21031    #[doc = "The geodetic altitude as defined by WGS84. If unknown: -1000 m."]
21032    pub altitude_geodetic: f32,
21033    #[doc = "The current height of the unmanned aircraft above the take-off location or the ground as indicated by height_reference. If unknown: -1000 m."]
21034    pub height: f32,
21035    #[doc = "Seconds after the full hour with reference to UTC time. Typically the GPS outputs a time-of-week value in milliseconds. First convert that to UTC and then convert for this field using ((float) (time_week_ms % (60*60*1000))) / 1000. If unknown: 0xFFFF."]
21036    pub timestamp: f32,
21037    #[doc = "Direction over ground (not heading, but direction of movement) measured clockwise from true North: 0 - 35999 centi-degrees. If unknown: 36100 centi-degrees."]
21038    pub direction: u16,
21039    #[doc = "Ground speed. Positive only. If unknown: 25500 cm/s. If speed is larger than 25425 cm/s, use 25425 cm/s."]
21040    pub speed_horizontal: u16,
21041    #[doc = "The vertical speed. Up is positive. If unknown: 6300 cm/s. If speed is larger than 6200 cm/s, use 6200 cm/s. If lower than -6200 cm/s, use -6200 cm/s."]
21042    pub speed_vertical: i16,
21043    #[doc = "System ID (0 for broadcast)."]
21044    pub target_system: u8,
21045    #[doc = "Component ID (0 for broadcast)."]
21046    pub target_component: u8,
21047    #[doc = "Only used for drone ID data received from other UAs. See detailed description at <https://mavlink.io/en/services/opendroneid.html>."]
21048    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
21049    pub id_or_mac: [u8; 20],
21050    #[doc = "Indicates whether the unmanned aircraft is on the ground or in the air."]
21051    pub status: MavOdidStatus,
21052    #[doc = "Indicates the reference point for the height field."]
21053    pub height_reference: MavOdidHeightRef,
21054    #[doc = "The accuracy of the horizontal position."]
21055    pub horizontal_accuracy: MavOdidHorAcc,
21056    #[doc = "The accuracy of the vertical position."]
21057    pub vertical_accuracy: MavOdidVerAcc,
21058    #[doc = "The accuracy of the barometric altitude."]
21059    pub barometer_accuracy: MavOdidVerAcc,
21060    #[doc = "The accuracy of the horizontal and vertical speed."]
21061    pub speed_accuracy: MavOdidSpeedAcc,
21062    #[doc = "The accuracy of the timestamps."]
21063    pub timestamp_accuracy: MavOdidTimeAcc,
21064}
21065impl OPEN_DRONE_ID_LOCATION_DATA {
21066    pub const ENCODED_LEN: usize = 59usize;
21067    pub const DEFAULT: Self = Self {
21068        latitude: 0_i32,
21069        longitude: 0_i32,
21070        altitude_barometric: 0.0_f32,
21071        altitude_geodetic: 0.0_f32,
21072        height: 0.0_f32,
21073        timestamp: 0.0_f32,
21074        direction: 0_u16,
21075        speed_horizontal: 0_u16,
21076        speed_vertical: 0_i16,
21077        target_system: 0_u8,
21078        target_component: 0_u8,
21079        id_or_mac: [0_u8; 20usize],
21080        status: MavOdidStatus::DEFAULT,
21081        height_reference: MavOdidHeightRef::DEFAULT,
21082        horizontal_accuracy: MavOdidHorAcc::DEFAULT,
21083        vertical_accuracy: MavOdidVerAcc::DEFAULT,
21084        barometer_accuracy: MavOdidVerAcc::DEFAULT,
21085        speed_accuracy: MavOdidSpeedAcc::DEFAULT,
21086        timestamp_accuracy: MavOdidTimeAcc::DEFAULT,
21087    };
21088    #[cfg(feature = "arbitrary")]
21089    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
21090        use arbitrary::{Arbitrary, Unstructured};
21091        let mut buf = [0u8; 1024];
21092        rng.fill_bytes(&mut buf);
21093        let mut unstructured = Unstructured::new(&buf);
21094        Self::arbitrary(&mut unstructured).unwrap_or_default()
21095    }
21096}
21097impl Default for OPEN_DRONE_ID_LOCATION_DATA {
21098    fn default() -> Self {
21099        Self::DEFAULT.clone()
21100    }
21101}
21102impl MessageData for OPEN_DRONE_ID_LOCATION_DATA {
21103    type Message = MavMessage;
21104    const ID: u32 = 12901u32;
21105    const NAME: &'static str = "OPEN_DRONE_ID_LOCATION";
21106    const EXTRA_CRC: u8 = 254u8;
21107    const ENCODED_LEN: usize = 59usize;
21108    fn deser(
21109        _version: MavlinkVersion,
21110        __input: &[u8],
21111    ) -> Result<Self, ::mavlink_core::error::ParserError> {
21112        let avail_len = __input.len();
21113        let mut payload_buf = [0; Self::ENCODED_LEN];
21114        let mut buf = if avail_len < Self::ENCODED_LEN {
21115            payload_buf[0..avail_len].copy_from_slice(__input);
21116            Bytes::new(&payload_buf)
21117        } else {
21118            Bytes::new(__input)
21119        };
21120        let mut __struct = Self::default();
21121        __struct.latitude = buf.get_i32_le();
21122        __struct.longitude = buf.get_i32_le();
21123        __struct.altitude_barometric = buf.get_f32_le();
21124        __struct.altitude_geodetic = buf.get_f32_le();
21125        __struct.height = buf.get_f32_le();
21126        __struct.timestamp = buf.get_f32_le();
21127        __struct.direction = buf.get_u16_le();
21128        __struct.speed_horizontal = buf.get_u16_le();
21129        __struct.speed_vertical = buf.get_i16_le();
21130        __struct.target_system = buf.get_u8();
21131        __struct.target_component = buf.get_u8();
21132        for v in &mut __struct.id_or_mac {
21133            let val = buf.get_u8();
21134            *v = val;
21135        }
21136        let tmp = buf.get_u8();
21137        __struct.status =
21138            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21139                enum_type: "MavOdidStatus",
21140                value: tmp as u32,
21141            })?;
21142        let tmp = buf.get_u8();
21143        __struct.height_reference =
21144            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21145                enum_type: "MavOdidHeightRef",
21146                value: tmp as u32,
21147            })?;
21148        let tmp = buf.get_u8();
21149        __struct.horizontal_accuracy =
21150            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21151                enum_type: "MavOdidHorAcc",
21152                value: tmp as u32,
21153            })?;
21154        let tmp = buf.get_u8();
21155        __struct.vertical_accuracy =
21156            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21157                enum_type: "MavOdidVerAcc",
21158                value: tmp as u32,
21159            })?;
21160        let tmp = buf.get_u8();
21161        __struct.barometer_accuracy =
21162            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21163                enum_type: "MavOdidVerAcc",
21164                value: tmp as u32,
21165            })?;
21166        let tmp = buf.get_u8();
21167        __struct.speed_accuracy =
21168            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21169                enum_type: "MavOdidSpeedAcc",
21170                value: tmp as u32,
21171            })?;
21172        let tmp = buf.get_u8();
21173        __struct.timestamp_accuracy =
21174            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21175                enum_type: "MavOdidTimeAcc",
21176                value: tmp as u32,
21177            })?;
21178        Ok(__struct)
21179    }
21180    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
21181        let mut __tmp = BytesMut::new(bytes);
21182        #[allow(clippy::absurd_extreme_comparisons)]
21183        #[allow(unused_comparisons)]
21184        if __tmp.remaining() < Self::ENCODED_LEN {
21185            panic!(
21186                "buffer is too small (need {} bytes, but got {})",
21187                Self::ENCODED_LEN,
21188                __tmp.remaining(),
21189            )
21190        }
21191        __tmp.put_i32_le(self.latitude);
21192        __tmp.put_i32_le(self.longitude);
21193        __tmp.put_f32_le(self.altitude_barometric);
21194        __tmp.put_f32_le(self.altitude_geodetic);
21195        __tmp.put_f32_le(self.height);
21196        __tmp.put_f32_le(self.timestamp);
21197        __tmp.put_u16_le(self.direction);
21198        __tmp.put_u16_le(self.speed_horizontal);
21199        __tmp.put_i16_le(self.speed_vertical);
21200        __tmp.put_u8(self.target_system);
21201        __tmp.put_u8(self.target_component);
21202        for val in &self.id_or_mac {
21203            __tmp.put_u8(*val);
21204        }
21205        __tmp.put_u8(self.status as u8);
21206        __tmp.put_u8(self.height_reference as u8);
21207        __tmp.put_u8(self.horizontal_accuracy as u8);
21208        __tmp.put_u8(self.vertical_accuracy as u8);
21209        __tmp.put_u8(self.barometer_accuracy as u8);
21210        __tmp.put_u8(self.speed_accuracy as u8);
21211        __tmp.put_u8(self.timestamp_accuracy as u8);
21212        if matches!(version, MavlinkVersion::V2) {
21213            let len = __tmp.len();
21214            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
21215        } else {
21216            __tmp.len()
21217        }
21218    }
21219}
21220#[doc = "id: 12915"]
21221#[doc = "An OpenDroneID message pack is a container for multiple encoded OpenDroneID messages (i.e. not in the format given for the above message descriptions but after encoding into the compressed OpenDroneID byte format). Used e.g. when transmitting on Bluetooth 5.0 Long Range/Extended Advertising or on WiFi Neighbor Aware Networking or on WiFi Beacon."]
21222#[derive(Debug, Clone, PartialEq)]
21223#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
21224#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21225pub struct OPEN_DRONE_ID_MESSAGE_PACK_DATA {
21226    #[doc = "System ID (0 for broadcast)."]
21227    pub target_system: u8,
21228    #[doc = "Component ID (0 for broadcast)."]
21229    pub target_component: u8,
21230    #[doc = "Only used for drone ID data received from other UAs. See detailed description at <https://mavlink.io/en/services/opendroneid.html>."]
21231    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
21232    pub id_or_mac: [u8; 20],
21233    #[doc = "This field must currently always be equal to 25 (bytes), since all encoded OpenDroneID messages are specified to have this length."]
21234    pub single_message_size: u8,
21235    #[doc = "Number of encoded messages in the pack (not the number of bytes). Allowed range is 1 - 9."]
21236    pub msg_pack_size: u8,
21237    #[doc = "Concatenation of encoded OpenDroneID messages. Shall be filled with nulls in the unused portion of the field."]
21238    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
21239    pub messages: [u8; 225],
21240}
21241impl OPEN_DRONE_ID_MESSAGE_PACK_DATA {
21242    pub const ENCODED_LEN: usize = 249usize;
21243    pub const DEFAULT: Self = Self {
21244        target_system: 0_u8,
21245        target_component: 0_u8,
21246        id_or_mac: [0_u8; 20usize],
21247        single_message_size: 0_u8,
21248        msg_pack_size: 0_u8,
21249        messages: [0_u8; 225usize],
21250    };
21251    #[cfg(feature = "arbitrary")]
21252    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
21253        use arbitrary::{Arbitrary, Unstructured};
21254        let mut buf = [0u8; 1024];
21255        rng.fill_bytes(&mut buf);
21256        let mut unstructured = Unstructured::new(&buf);
21257        Self::arbitrary(&mut unstructured).unwrap_or_default()
21258    }
21259}
21260impl Default for OPEN_DRONE_ID_MESSAGE_PACK_DATA {
21261    fn default() -> Self {
21262        Self::DEFAULT.clone()
21263    }
21264}
21265impl MessageData for OPEN_DRONE_ID_MESSAGE_PACK_DATA {
21266    type Message = MavMessage;
21267    const ID: u32 = 12915u32;
21268    const NAME: &'static str = "OPEN_DRONE_ID_MESSAGE_PACK";
21269    const EXTRA_CRC: u8 = 94u8;
21270    const ENCODED_LEN: usize = 249usize;
21271    fn deser(
21272        _version: MavlinkVersion,
21273        __input: &[u8],
21274    ) -> Result<Self, ::mavlink_core::error::ParserError> {
21275        let avail_len = __input.len();
21276        let mut payload_buf = [0; Self::ENCODED_LEN];
21277        let mut buf = if avail_len < Self::ENCODED_LEN {
21278            payload_buf[0..avail_len].copy_from_slice(__input);
21279            Bytes::new(&payload_buf)
21280        } else {
21281            Bytes::new(__input)
21282        };
21283        let mut __struct = Self::default();
21284        __struct.target_system = buf.get_u8();
21285        __struct.target_component = buf.get_u8();
21286        for v in &mut __struct.id_or_mac {
21287            let val = buf.get_u8();
21288            *v = val;
21289        }
21290        __struct.single_message_size = buf.get_u8();
21291        __struct.msg_pack_size = buf.get_u8();
21292        for v in &mut __struct.messages {
21293            let val = buf.get_u8();
21294            *v = val;
21295        }
21296        Ok(__struct)
21297    }
21298    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
21299        let mut __tmp = BytesMut::new(bytes);
21300        #[allow(clippy::absurd_extreme_comparisons)]
21301        #[allow(unused_comparisons)]
21302        if __tmp.remaining() < Self::ENCODED_LEN {
21303            panic!(
21304                "buffer is too small (need {} bytes, but got {})",
21305                Self::ENCODED_LEN,
21306                __tmp.remaining(),
21307            )
21308        }
21309        __tmp.put_u8(self.target_system);
21310        __tmp.put_u8(self.target_component);
21311        for val in &self.id_or_mac {
21312            __tmp.put_u8(*val);
21313        }
21314        __tmp.put_u8(self.single_message_size);
21315        __tmp.put_u8(self.msg_pack_size);
21316        for val in &self.messages {
21317            __tmp.put_u8(*val);
21318        }
21319        if matches!(version, MavlinkVersion::V2) {
21320            let len = __tmp.len();
21321            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
21322        } else {
21323            __tmp.len()
21324        }
21325    }
21326}
21327#[doc = "id: 12905"]
21328#[doc = "Data for filling the OpenDroneID Operator ID message, which contains the CAA (Civil Aviation Authority) issued operator ID."]
21329#[derive(Debug, Clone, PartialEq)]
21330#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
21331#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21332pub struct OPEN_DRONE_ID_OPERATOR_ID_DATA {
21333    #[doc = "System ID (0 for broadcast)."]
21334    pub target_system: u8,
21335    #[doc = "Component ID (0 for broadcast)."]
21336    pub target_component: u8,
21337    #[doc = "Only used for drone ID data received from other UAs. See detailed description at <https://mavlink.io/en/services/opendroneid.html>."]
21338    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
21339    pub id_or_mac: [u8; 20],
21340    #[doc = "Indicates the type of the operator_id field."]
21341    pub operator_id_type: MavOdidOperatorIdType,
21342    #[doc = "Text description or numeric value expressed as ASCII characters. Shall be filled with nulls in the unused portion of the field."]
21343    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
21344    pub operator_id: [u8; 20],
21345}
21346impl OPEN_DRONE_ID_OPERATOR_ID_DATA {
21347    pub const ENCODED_LEN: usize = 43usize;
21348    pub const DEFAULT: Self = Self {
21349        target_system: 0_u8,
21350        target_component: 0_u8,
21351        id_or_mac: [0_u8; 20usize],
21352        operator_id_type: MavOdidOperatorIdType::DEFAULT,
21353        operator_id: [0_u8; 20usize],
21354    };
21355    #[cfg(feature = "arbitrary")]
21356    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
21357        use arbitrary::{Arbitrary, Unstructured};
21358        let mut buf = [0u8; 1024];
21359        rng.fill_bytes(&mut buf);
21360        let mut unstructured = Unstructured::new(&buf);
21361        Self::arbitrary(&mut unstructured).unwrap_or_default()
21362    }
21363}
21364impl Default for OPEN_DRONE_ID_OPERATOR_ID_DATA {
21365    fn default() -> Self {
21366        Self::DEFAULT.clone()
21367    }
21368}
21369impl MessageData for OPEN_DRONE_ID_OPERATOR_ID_DATA {
21370    type Message = MavMessage;
21371    const ID: u32 = 12905u32;
21372    const NAME: &'static str = "OPEN_DRONE_ID_OPERATOR_ID";
21373    const EXTRA_CRC: u8 = 49u8;
21374    const ENCODED_LEN: usize = 43usize;
21375    fn deser(
21376        _version: MavlinkVersion,
21377        __input: &[u8],
21378    ) -> Result<Self, ::mavlink_core::error::ParserError> {
21379        let avail_len = __input.len();
21380        let mut payload_buf = [0; Self::ENCODED_LEN];
21381        let mut buf = if avail_len < Self::ENCODED_LEN {
21382            payload_buf[0..avail_len].copy_from_slice(__input);
21383            Bytes::new(&payload_buf)
21384        } else {
21385            Bytes::new(__input)
21386        };
21387        let mut __struct = Self::default();
21388        __struct.target_system = buf.get_u8();
21389        __struct.target_component = buf.get_u8();
21390        for v in &mut __struct.id_or_mac {
21391            let val = buf.get_u8();
21392            *v = val;
21393        }
21394        let tmp = buf.get_u8();
21395        __struct.operator_id_type =
21396            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21397                enum_type: "MavOdidOperatorIdType",
21398                value: tmp as u32,
21399            })?;
21400        for v in &mut __struct.operator_id {
21401            let val = buf.get_u8();
21402            *v = val;
21403        }
21404        Ok(__struct)
21405    }
21406    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
21407        let mut __tmp = BytesMut::new(bytes);
21408        #[allow(clippy::absurd_extreme_comparisons)]
21409        #[allow(unused_comparisons)]
21410        if __tmp.remaining() < Self::ENCODED_LEN {
21411            panic!(
21412                "buffer is too small (need {} bytes, but got {})",
21413                Self::ENCODED_LEN,
21414                __tmp.remaining(),
21415            )
21416        }
21417        __tmp.put_u8(self.target_system);
21418        __tmp.put_u8(self.target_component);
21419        for val in &self.id_or_mac {
21420            __tmp.put_u8(*val);
21421        }
21422        __tmp.put_u8(self.operator_id_type as u8);
21423        for val in &self.operator_id {
21424            __tmp.put_u8(*val);
21425        }
21426        if matches!(version, MavlinkVersion::V2) {
21427            let len = __tmp.len();
21428            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
21429        } else {
21430            __tmp.len()
21431        }
21432    }
21433}
21434#[doc = "id: 12903"]
21435#[doc = "Data for filling the OpenDroneID Self ID message. The Self ID Message is an opportunity for the operator to (optionally) declare their identity and purpose of the flight. This message can provide additional information that could reduce the threat profile of a UA (Unmanned Aircraft) flying in a particular area or manner. This message can also be used to provide optional additional clarification in an emergency/remote ID system failure situation."]
21436#[derive(Debug, Clone, PartialEq)]
21437#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
21438#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21439pub struct OPEN_DRONE_ID_SELF_ID_DATA {
21440    #[doc = "System ID (0 for broadcast)."]
21441    pub target_system: u8,
21442    #[doc = "Component ID (0 for broadcast)."]
21443    pub target_component: u8,
21444    #[doc = "Only used for drone ID data received from other UAs. See detailed description at <https://mavlink.io/en/services/opendroneid.html>."]
21445    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
21446    pub id_or_mac: [u8; 20],
21447    #[doc = "Indicates the type of the description field."]
21448    pub description_type: MavOdidDescType,
21449    #[doc = "Text description or numeric value expressed as ASCII characters. Shall be filled with nulls in the unused portion of the field."]
21450    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
21451    pub description: [u8; 23],
21452}
21453impl OPEN_DRONE_ID_SELF_ID_DATA {
21454    pub const ENCODED_LEN: usize = 46usize;
21455    pub const DEFAULT: Self = Self {
21456        target_system: 0_u8,
21457        target_component: 0_u8,
21458        id_or_mac: [0_u8; 20usize],
21459        description_type: MavOdidDescType::DEFAULT,
21460        description: [0_u8; 23usize],
21461    };
21462    #[cfg(feature = "arbitrary")]
21463    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
21464        use arbitrary::{Arbitrary, Unstructured};
21465        let mut buf = [0u8; 1024];
21466        rng.fill_bytes(&mut buf);
21467        let mut unstructured = Unstructured::new(&buf);
21468        Self::arbitrary(&mut unstructured).unwrap_or_default()
21469    }
21470}
21471impl Default for OPEN_DRONE_ID_SELF_ID_DATA {
21472    fn default() -> Self {
21473        Self::DEFAULT.clone()
21474    }
21475}
21476impl MessageData for OPEN_DRONE_ID_SELF_ID_DATA {
21477    type Message = MavMessage;
21478    const ID: u32 = 12903u32;
21479    const NAME: &'static str = "OPEN_DRONE_ID_SELF_ID";
21480    const EXTRA_CRC: u8 = 249u8;
21481    const ENCODED_LEN: usize = 46usize;
21482    fn deser(
21483        _version: MavlinkVersion,
21484        __input: &[u8],
21485    ) -> Result<Self, ::mavlink_core::error::ParserError> {
21486        let avail_len = __input.len();
21487        let mut payload_buf = [0; Self::ENCODED_LEN];
21488        let mut buf = if avail_len < Self::ENCODED_LEN {
21489            payload_buf[0..avail_len].copy_from_slice(__input);
21490            Bytes::new(&payload_buf)
21491        } else {
21492            Bytes::new(__input)
21493        };
21494        let mut __struct = Self::default();
21495        __struct.target_system = buf.get_u8();
21496        __struct.target_component = buf.get_u8();
21497        for v in &mut __struct.id_or_mac {
21498            let val = buf.get_u8();
21499            *v = val;
21500        }
21501        let tmp = buf.get_u8();
21502        __struct.description_type =
21503            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21504                enum_type: "MavOdidDescType",
21505                value: tmp as u32,
21506            })?;
21507        for v in &mut __struct.description {
21508            let val = buf.get_u8();
21509            *v = val;
21510        }
21511        Ok(__struct)
21512    }
21513    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
21514        let mut __tmp = BytesMut::new(bytes);
21515        #[allow(clippy::absurd_extreme_comparisons)]
21516        #[allow(unused_comparisons)]
21517        if __tmp.remaining() < Self::ENCODED_LEN {
21518            panic!(
21519                "buffer is too small (need {} bytes, but got {})",
21520                Self::ENCODED_LEN,
21521                __tmp.remaining(),
21522            )
21523        }
21524        __tmp.put_u8(self.target_system);
21525        __tmp.put_u8(self.target_component);
21526        for val in &self.id_or_mac {
21527            __tmp.put_u8(*val);
21528        }
21529        __tmp.put_u8(self.description_type as u8);
21530        for val in &self.description {
21531            __tmp.put_u8(*val);
21532        }
21533        if matches!(version, MavlinkVersion::V2) {
21534            let len = __tmp.len();
21535            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
21536        } else {
21537            __tmp.len()
21538        }
21539    }
21540}
21541#[doc = "id: 12904"]
21542#[doc = "Data for filling the OpenDroneID System message. The System Message contains general system information including the operator location/altitude and possible aircraft group and/or category/class information."]
21543#[derive(Debug, Clone, PartialEq)]
21544#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
21545#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21546pub struct OPEN_DRONE_ID_SYSTEM_DATA {
21547    #[doc = "Latitude of the operator. If unknown: 0 (both Lat/Lon)."]
21548    pub operator_latitude: i32,
21549    #[doc = "Longitude of the operator. If unknown: 0 (both Lat/Lon)."]
21550    pub operator_longitude: i32,
21551    #[doc = "Area Operations Ceiling relative to WGS84. If unknown: -1000 m. Used only for swarms/multiple UA."]
21552    pub area_ceiling: f32,
21553    #[doc = "Area Operations Floor relative to WGS84. If unknown: -1000 m. Used only for swarms/multiple UA."]
21554    pub area_floor: f32,
21555    #[doc = "Geodetic altitude of the operator relative to WGS84. If unknown: -1000 m."]
21556    pub operator_altitude_geo: f32,
21557    #[doc = "32 bit Unix Timestamp in seconds since 00:00:00 01/01/2019."]
21558    pub timestamp: u32,
21559    #[doc = "Number of aircraft in the area, group or formation (default 1). Used only for swarms/multiple UA."]
21560    pub area_count: u16,
21561    #[doc = "Radius of the cylindrical area of the group or formation (default 0). Used only for swarms/multiple UA."]
21562    pub area_radius: u16,
21563    #[doc = "System ID (0 for broadcast)."]
21564    pub target_system: u8,
21565    #[doc = "Component ID (0 for broadcast)."]
21566    pub target_component: u8,
21567    #[doc = "Only used for drone ID data received from other UAs. See detailed description at <https://mavlink.io/en/services/opendroneid.html>."]
21568    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
21569    pub id_or_mac: [u8; 20],
21570    #[doc = "Specifies the operator location type."]
21571    pub operator_location_type: MavOdidOperatorLocationType,
21572    #[doc = "Specifies the classification type of the UA."]
21573    pub classification_type: MavOdidClassificationType,
21574    #[doc = "When classification_type is MAV_ODID_CLASSIFICATION_TYPE_EU, specifies the category of the UA."]
21575    pub category_eu: MavOdidCategoryEu,
21576    #[doc = "When classification_type is MAV_ODID_CLASSIFICATION_TYPE_EU, specifies the class of the UA."]
21577    pub class_eu: MavOdidClassEu,
21578}
21579impl OPEN_DRONE_ID_SYSTEM_DATA {
21580    pub const ENCODED_LEN: usize = 54usize;
21581    pub const DEFAULT: Self = Self {
21582        operator_latitude: 0_i32,
21583        operator_longitude: 0_i32,
21584        area_ceiling: 0.0_f32,
21585        area_floor: 0.0_f32,
21586        operator_altitude_geo: 0.0_f32,
21587        timestamp: 0_u32,
21588        area_count: 0_u16,
21589        area_radius: 0_u16,
21590        target_system: 0_u8,
21591        target_component: 0_u8,
21592        id_or_mac: [0_u8; 20usize],
21593        operator_location_type: MavOdidOperatorLocationType::DEFAULT,
21594        classification_type: MavOdidClassificationType::DEFAULT,
21595        category_eu: MavOdidCategoryEu::DEFAULT,
21596        class_eu: MavOdidClassEu::DEFAULT,
21597    };
21598    #[cfg(feature = "arbitrary")]
21599    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
21600        use arbitrary::{Arbitrary, Unstructured};
21601        let mut buf = [0u8; 1024];
21602        rng.fill_bytes(&mut buf);
21603        let mut unstructured = Unstructured::new(&buf);
21604        Self::arbitrary(&mut unstructured).unwrap_or_default()
21605    }
21606}
21607impl Default for OPEN_DRONE_ID_SYSTEM_DATA {
21608    fn default() -> Self {
21609        Self::DEFAULT.clone()
21610    }
21611}
21612impl MessageData for OPEN_DRONE_ID_SYSTEM_DATA {
21613    type Message = MavMessage;
21614    const ID: u32 = 12904u32;
21615    const NAME: &'static str = "OPEN_DRONE_ID_SYSTEM";
21616    const EXTRA_CRC: u8 = 77u8;
21617    const ENCODED_LEN: usize = 54usize;
21618    fn deser(
21619        _version: MavlinkVersion,
21620        __input: &[u8],
21621    ) -> Result<Self, ::mavlink_core::error::ParserError> {
21622        let avail_len = __input.len();
21623        let mut payload_buf = [0; Self::ENCODED_LEN];
21624        let mut buf = if avail_len < Self::ENCODED_LEN {
21625            payload_buf[0..avail_len].copy_from_slice(__input);
21626            Bytes::new(&payload_buf)
21627        } else {
21628            Bytes::new(__input)
21629        };
21630        let mut __struct = Self::default();
21631        __struct.operator_latitude = buf.get_i32_le();
21632        __struct.operator_longitude = buf.get_i32_le();
21633        __struct.area_ceiling = buf.get_f32_le();
21634        __struct.area_floor = buf.get_f32_le();
21635        __struct.operator_altitude_geo = buf.get_f32_le();
21636        __struct.timestamp = buf.get_u32_le();
21637        __struct.area_count = buf.get_u16_le();
21638        __struct.area_radius = buf.get_u16_le();
21639        __struct.target_system = buf.get_u8();
21640        __struct.target_component = buf.get_u8();
21641        for v in &mut __struct.id_or_mac {
21642            let val = buf.get_u8();
21643            *v = val;
21644        }
21645        let tmp = buf.get_u8();
21646        __struct.operator_location_type =
21647            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21648                enum_type: "MavOdidOperatorLocationType",
21649                value: tmp as u32,
21650            })?;
21651        let tmp = buf.get_u8();
21652        __struct.classification_type =
21653            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21654                enum_type: "MavOdidClassificationType",
21655                value: tmp as u32,
21656            })?;
21657        let tmp = buf.get_u8();
21658        __struct.category_eu =
21659            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21660                enum_type: "MavOdidCategoryEu",
21661                value: tmp as u32,
21662            })?;
21663        let tmp = buf.get_u8();
21664        __struct.class_eu =
21665            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
21666                enum_type: "MavOdidClassEu",
21667                value: tmp as u32,
21668            })?;
21669        Ok(__struct)
21670    }
21671    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
21672        let mut __tmp = BytesMut::new(bytes);
21673        #[allow(clippy::absurd_extreme_comparisons)]
21674        #[allow(unused_comparisons)]
21675        if __tmp.remaining() < Self::ENCODED_LEN {
21676            panic!(
21677                "buffer is too small (need {} bytes, but got {})",
21678                Self::ENCODED_LEN,
21679                __tmp.remaining(),
21680            )
21681        }
21682        __tmp.put_i32_le(self.operator_latitude);
21683        __tmp.put_i32_le(self.operator_longitude);
21684        __tmp.put_f32_le(self.area_ceiling);
21685        __tmp.put_f32_le(self.area_floor);
21686        __tmp.put_f32_le(self.operator_altitude_geo);
21687        __tmp.put_u32_le(self.timestamp);
21688        __tmp.put_u16_le(self.area_count);
21689        __tmp.put_u16_le(self.area_radius);
21690        __tmp.put_u8(self.target_system);
21691        __tmp.put_u8(self.target_component);
21692        for val in &self.id_or_mac {
21693            __tmp.put_u8(*val);
21694        }
21695        __tmp.put_u8(self.operator_location_type as u8);
21696        __tmp.put_u8(self.classification_type as u8);
21697        __tmp.put_u8(self.category_eu as u8);
21698        __tmp.put_u8(self.class_eu as u8);
21699        if matches!(version, MavlinkVersion::V2) {
21700            let len = __tmp.len();
21701            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
21702        } else {
21703            __tmp.len()
21704        }
21705    }
21706}
21707#[doc = "id: 12919"]
21708#[doc = "Update the data in the OPEN_DRONE_ID_SYSTEM message with new location information. This can be sent to update the location information for the operator when no other information in the SYSTEM message has changed. This message allows for efficient operation on radio links which have limited uplink bandwidth while meeting requirements for update frequency of the operator location."]
21709#[derive(Debug, Clone, PartialEq)]
21710#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
21711#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21712pub struct OPEN_DRONE_ID_SYSTEM_UPDATE_DATA {
21713    #[doc = "Latitude of the operator. If unknown: 0 (both Lat/Lon)."]
21714    pub operator_latitude: i32,
21715    #[doc = "Longitude of the operator. If unknown: 0 (both Lat/Lon)."]
21716    pub operator_longitude: i32,
21717    #[doc = "Geodetic altitude of the operator relative to WGS84. If unknown: -1000 m."]
21718    pub operator_altitude_geo: f32,
21719    #[doc = "32 bit Unix Timestamp in seconds since 00:00:00 01/01/2019."]
21720    pub timestamp: u32,
21721    #[doc = "System ID (0 for broadcast)."]
21722    pub target_system: u8,
21723    #[doc = "Component ID (0 for broadcast)."]
21724    pub target_component: u8,
21725}
21726impl OPEN_DRONE_ID_SYSTEM_UPDATE_DATA {
21727    pub const ENCODED_LEN: usize = 18usize;
21728    pub const DEFAULT: Self = Self {
21729        operator_latitude: 0_i32,
21730        operator_longitude: 0_i32,
21731        operator_altitude_geo: 0.0_f32,
21732        timestamp: 0_u32,
21733        target_system: 0_u8,
21734        target_component: 0_u8,
21735    };
21736    #[cfg(feature = "arbitrary")]
21737    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
21738        use arbitrary::{Arbitrary, Unstructured};
21739        let mut buf = [0u8; 1024];
21740        rng.fill_bytes(&mut buf);
21741        let mut unstructured = Unstructured::new(&buf);
21742        Self::arbitrary(&mut unstructured).unwrap_or_default()
21743    }
21744}
21745impl Default for OPEN_DRONE_ID_SYSTEM_UPDATE_DATA {
21746    fn default() -> Self {
21747        Self::DEFAULT.clone()
21748    }
21749}
21750impl MessageData for OPEN_DRONE_ID_SYSTEM_UPDATE_DATA {
21751    type Message = MavMessage;
21752    const ID: u32 = 12919u32;
21753    const NAME: &'static str = "OPEN_DRONE_ID_SYSTEM_UPDATE";
21754    const EXTRA_CRC: u8 = 7u8;
21755    const ENCODED_LEN: usize = 18usize;
21756    fn deser(
21757        _version: MavlinkVersion,
21758        __input: &[u8],
21759    ) -> Result<Self, ::mavlink_core::error::ParserError> {
21760        let avail_len = __input.len();
21761        let mut payload_buf = [0; Self::ENCODED_LEN];
21762        let mut buf = if avail_len < Self::ENCODED_LEN {
21763            payload_buf[0..avail_len].copy_from_slice(__input);
21764            Bytes::new(&payload_buf)
21765        } else {
21766            Bytes::new(__input)
21767        };
21768        let mut __struct = Self::default();
21769        __struct.operator_latitude = buf.get_i32_le();
21770        __struct.operator_longitude = buf.get_i32_le();
21771        __struct.operator_altitude_geo = buf.get_f32_le();
21772        __struct.timestamp = buf.get_u32_le();
21773        __struct.target_system = buf.get_u8();
21774        __struct.target_component = buf.get_u8();
21775        Ok(__struct)
21776    }
21777    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
21778        let mut __tmp = BytesMut::new(bytes);
21779        #[allow(clippy::absurd_extreme_comparisons)]
21780        #[allow(unused_comparisons)]
21781        if __tmp.remaining() < Self::ENCODED_LEN {
21782            panic!(
21783                "buffer is too small (need {} bytes, but got {})",
21784                Self::ENCODED_LEN,
21785                __tmp.remaining(),
21786            )
21787        }
21788        __tmp.put_i32_le(self.operator_latitude);
21789        __tmp.put_i32_le(self.operator_longitude);
21790        __tmp.put_f32_le(self.operator_altitude_geo);
21791        __tmp.put_u32_le(self.timestamp);
21792        __tmp.put_u8(self.target_system);
21793        __tmp.put_u8(self.target_component);
21794        if matches!(version, MavlinkVersion::V2) {
21795            let len = __tmp.len();
21796            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
21797        } else {
21798            __tmp.len()
21799        }
21800    }
21801}
21802#[doc = "id: 100"]
21803#[doc = "Optical flow from a flow sensor (e.g. optical mouse sensor)."]
21804#[derive(Debug, Clone, PartialEq)]
21805#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
21806#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21807pub struct OPTICAL_FLOW_DATA {
21808    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
21809    pub time_usec: u64,
21810    #[doc = "Flow in x-sensor direction, angular-speed compensated"]
21811    pub flow_comp_m_x: f32,
21812    #[doc = "Flow in y-sensor direction, angular-speed compensated"]
21813    pub flow_comp_m_y: f32,
21814    #[doc = "Ground distance. Positive value: distance known. Negative value: Unknown distance"]
21815    pub ground_distance: f32,
21816    #[doc = "Flow in x-sensor direction"]
21817    pub flow_x: i16,
21818    #[doc = "Flow in y-sensor direction"]
21819    pub flow_y: i16,
21820    #[doc = "Sensor ID"]
21821    pub sensor_id: u8,
21822    #[doc = "Optical flow quality / confidence. 0: bad, 255: maximum quality"]
21823    pub quality: u8,
21824    #[doc = "Flow rate about X axis"]
21825    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
21826    pub flow_rate_x: f32,
21827    #[doc = "Flow rate about Y axis"]
21828    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
21829    pub flow_rate_y: f32,
21830}
21831impl OPTICAL_FLOW_DATA {
21832    pub const ENCODED_LEN: usize = 34usize;
21833    pub const DEFAULT: Self = Self {
21834        time_usec: 0_u64,
21835        flow_comp_m_x: 0.0_f32,
21836        flow_comp_m_y: 0.0_f32,
21837        ground_distance: 0.0_f32,
21838        flow_x: 0_i16,
21839        flow_y: 0_i16,
21840        sensor_id: 0_u8,
21841        quality: 0_u8,
21842        flow_rate_x: 0.0_f32,
21843        flow_rate_y: 0.0_f32,
21844    };
21845    #[cfg(feature = "arbitrary")]
21846    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
21847        use arbitrary::{Arbitrary, Unstructured};
21848        let mut buf = [0u8; 1024];
21849        rng.fill_bytes(&mut buf);
21850        let mut unstructured = Unstructured::new(&buf);
21851        Self::arbitrary(&mut unstructured).unwrap_or_default()
21852    }
21853}
21854impl Default for OPTICAL_FLOW_DATA {
21855    fn default() -> Self {
21856        Self::DEFAULT.clone()
21857    }
21858}
21859impl MessageData for OPTICAL_FLOW_DATA {
21860    type Message = MavMessage;
21861    const ID: u32 = 100u32;
21862    const NAME: &'static str = "OPTICAL_FLOW";
21863    const EXTRA_CRC: u8 = 175u8;
21864    const ENCODED_LEN: usize = 34usize;
21865    fn deser(
21866        _version: MavlinkVersion,
21867        __input: &[u8],
21868    ) -> Result<Self, ::mavlink_core::error::ParserError> {
21869        let avail_len = __input.len();
21870        let mut payload_buf = [0; Self::ENCODED_LEN];
21871        let mut buf = if avail_len < Self::ENCODED_LEN {
21872            payload_buf[0..avail_len].copy_from_slice(__input);
21873            Bytes::new(&payload_buf)
21874        } else {
21875            Bytes::new(__input)
21876        };
21877        let mut __struct = Self::default();
21878        __struct.time_usec = buf.get_u64_le();
21879        __struct.flow_comp_m_x = buf.get_f32_le();
21880        __struct.flow_comp_m_y = buf.get_f32_le();
21881        __struct.ground_distance = buf.get_f32_le();
21882        __struct.flow_x = buf.get_i16_le();
21883        __struct.flow_y = buf.get_i16_le();
21884        __struct.sensor_id = buf.get_u8();
21885        __struct.quality = buf.get_u8();
21886        __struct.flow_rate_x = buf.get_f32_le();
21887        __struct.flow_rate_y = buf.get_f32_le();
21888        Ok(__struct)
21889    }
21890    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
21891        let mut __tmp = BytesMut::new(bytes);
21892        #[allow(clippy::absurd_extreme_comparisons)]
21893        #[allow(unused_comparisons)]
21894        if __tmp.remaining() < Self::ENCODED_LEN {
21895            panic!(
21896                "buffer is too small (need {} bytes, but got {})",
21897                Self::ENCODED_LEN,
21898                __tmp.remaining(),
21899            )
21900        }
21901        __tmp.put_u64_le(self.time_usec);
21902        __tmp.put_f32_le(self.flow_comp_m_x);
21903        __tmp.put_f32_le(self.flow_comp_m_y);
21904        __tmp.put_f32_le(self.ground_distance);
21905        __tmp.put_i16_le(self.flow_x);
21906        __tmp.put_i16_le(self.flow_y);
21907        __tmp.put_u8(self.sensor_id);
21908        __tmp.put_u8(self.quality);
21909        __tmp.put_f32_le(self.flow_rate_x);
21910        __tmp.put_f32_le(self.flow_rate_y);
21911        if matches!(version, MavlinkVersion::V2) {
21912            let len = __tmp.len();
21913            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
21914        } else {
21915            __tmp.len()
21916        }
21917    }
21918}
21919#[doc = "id: 106"]
21920#[doc = "Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse sensor)."]
21921#[derive(Debug, Clone, PartialEq)]
21922#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
21923#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21924pub struct OPTICAL_FLOW_RAD_DATA {
21925    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
21926    pub time_usec: u64,
21927    #[doc = "Integration time. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the."]
21928    pub integration_time_us: u32,
21929    #[doc = "Flow around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)"]
21930    pub integrated_x: f32,
21931    #[doc = "Flow around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)"]
21932    pub integrated_y: f32,
21933    #[doc = "RH rotation around X axis"]
21934    pub integrated_xgyro: f32,
21935    #[doc = "RH rotation around Y axis"]
21936    pub integrated_ygyro: f32,
21937    #[doc = "RH rotation around Z axis"]
21938    pub integrated_zgyro: f32,
21939    #[doc = "Time since the distance was sampled."]
21940    pub time_delta_distance_us: u32,
21941    #[doc = "Distance to the center of the flow field. Positive value (including zero): distance known. Negative value: Unknown distance."]
21942    pub distance: f32,
21943    #[doc = "Temperature"]
21944    pub temperature: i16,
21945    #[doc = "Sensor ID"]
21946    pub sensor_id: u8,
21947    #[doc = "Optical flow quality / confidence. 0: no valid flow, 255: maximum quality"]
21948    pub quality: u8,
21949}
21950impl OPTICAL_FLOW_RAD_DATA {
21951    pub const ENCODED_LEN: usize = 44usize;
21952    pub const DEFAULT: Self = Self {
21953        time_usec: 0_u64,
21954        integration_time_us: 0_u32,
21955        integrated_x: 0.0_f32,
21956        integrated_y: 0.0_f32,
21957        integrated_xgyro: 0.0_f32,
21958        integrated_ygyro: 0.0_f32,
21959        integrated_zgyro: 0.0_f32,
21960        time_delta_distance_us: 0_u32,
21961        distance: 0.0_f32,
21962        temperature: 0_i16,
21963        sensor_id: 0_u8,
21964        quality: 0_u8,
21965    };
21966    #[cfg(feature = "arbitrary")]
21967    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
21968        use arbitrary::{Arbitrary, Unstructured};
21969        let mut buf = [0u8; 1024];
21970        rng.fill_bytes(&mut buf);
21971        let mut unstructured = Unstructured::new(&buf);
21972        Self::arbitrary(&mut unstructured).unwrap_or_default()
21973    }
21974}
21975impl Default for OPTICAL_FLOW_RAD_DATA {
21976    fn default() -> Self {
21977        Self::DEFAULT.clone()
21978    }
21979}
21980impl MessageData for OPTICAL_FLOW_RAD_DATA {
21981    type Message = MavMessage;
21982    const ID: u32 = 106u32;
21983    const NAME: &'static str = "OPTICAL_FLOW_RAD";
21984    const EXTRA_CRC: u8 = 138u8;
21985    const ENCODED_LEN: usize = 44usize;
21986    fn deser(
21987        _version: MavlinkVersion,
21988        __input: &[u8],
21989    ) -> Result<Self, ::mavlink_core::error::ParserError> {
21990        let avail_len = __input.len();
21991        let mut payload_buf = [0; Self::ENCODED_LEN];
21992        let mut buf = if avail_len < Self::ENCODED_LEN {
21993            payload_buf[0..avail_len].copy_from_slice(__input);
21994            Bytes::new(&payload_buf)
21995        } else {
21996            Bytes::new(__input)
21997        };
21998        let mut __struct = Self::default();
21999        __struct.time_usec = buf.get_u64_le();
22000        __struct.integration_time_us = buf.get_u32_le();
22001        __struct.integrated_x = buf.get_f32_le();
22002        __struct.integrated_y = buf.get_f32_le();
22003        __struct.integrated_xgyro = buf.get_f32_le();
22004        __struct.integrated_ygyro = buf.get_f32_le();
22005        __struct.integrated_zgyro = buf.get_f32_le();
22006        __struct.time_delta_distance_us = buf.get_u32_le();
22007        __struct.distance = buf.get_f32_le();
22008        __struct.temperature = buf.get_i16_le();
22009        __struct.sensor_id = buf.get_u8();
22010        __struct.quality = buf.get_u8();
22011        Ok(__struct)
22012    }
22013    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
22014        let mut __tmp = BytesMut::new(bytes);
22015        #[allow(clippy::absurd_extreme_comparisons)]
22016        #[allow(unused_comparisons)]
22017        if __tmp.remaining() < Self::ENCODED_LEN {
22018            panic!(
22019                "buffer is too small (need {} bytes, but got {})",
22020                Self::ENCODED_LEN,
22021                __tmp.remaining(),
22022            )
22023        }
22024        __tmp.put_u64_le(self.time_usec);
22025        __tmp.put_u32_le(self.integration_time_us);
22026        __tmp.put_f32_le(self.integrated_x);
22027        __tmp.put_f32_le(self.integrated_y);
22028        __tmp.put_f32_le(self.integrated_xgyro);
22029        __tmp.put_f32_le(self.integrated_ygyro);
22030        __tmp.put_f32_le(self.integrated_zgyro);
22031        __tmp.put_u32_le(self.time_delta_distance_us);
22032        __tmp.put_f32_le(self.distance);
22033        __tmp.put_i16_le(self.temperature);
22034        __tmp.put_u8(self.sensor_id);
22035        __tmp.put_u8(self.quality);
22036        if matches!(version, MavlinkVersion::V2) {
22037            let len = __tmp.len();
22038            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
22039        } else {
22040            __tmp.len()
22041        }
22042    }
22043}
22044#[doc = "id: 360"]
22045#[doc = "Vehicle status report that is sent out while orbit execution is in progress (see MAV_CMD_DO_ORBIT)."]
22046#[derive(Debug, Clone, PartialEq)]
22047#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
22048#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22049pub struct ORBIT_EXECUTION_STATUS_DATA {
22050    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
22051    pub time_usec: u64,
22052    #[doc = "Radius of the orbit circle. Positive values orbit clockwise, negative values orbit counter-clockwise."]
22053    pub radius: f32,
22054    #[doc = "X coordinate of center point. Coordinate system depends on frame field: local = x position in meters * 1e4, global = latitude in degrees * 1e7."]
22055    pub x: i32,
22056    #[doc = "Y coordinate of center point.  Coordinate system depends on frame field: local = x position in meters * 1e4, global = latitude in degrees * 1e7."]
22057    pub y: i32,
22058    #[doc = "Altitude of center point. Coordinate system depends on frame field."]
22059    pub z: f32,
22060    #[doc = "The coordinate system of the fields: x, y, z."]
22061    pub frame: MavFrame,
22062}
22063impl ORBIT_EXECUTION_STATUS_DATA {
22064    pub const ENCODED_LEN: usize = 25usize;
22065    pub const DEFAULT: Self = Self {
22066        time_usec: 0_u64,
22067        radius: 0.0_f32,
22068        x: 0_i32,
22069        y: 0_i32,
22070        z: 0.0_f32,
22071        frame: MavFrame::DEFAULT,
22072    };
22073    #[cfg(feature = "arbitrary")]
22074    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
22075        use arbitrary::{Arbitrary, Unstructured};
22076        let mut buf = [0u8; 1024];
22077        rng.fill_bytes(&mut buf);
22078        let mut unstructured = Unstructured::new(&buf);
22079        Self::arbitrary(&mut unstructured).unwrap_or_default()
22080    }
22081}
22082impl Default for ORBIT_EXECUTION_STATUS_DATA {
22083    fn default() -> Self {
22084        Self::DEFAULT.clone()
22085    }
22086}
22087impl MessageData for ORBIT_EXECUTION_STATUS_DATA {
22088    type Message = MavMessage;
22089    const ID: u32 = 360u32;
22090    const NAME: &'static str = "ORBIT_EXECUTION_STATUS";
22091    const EXTRA_CRC: u8 = 11u8;
22092    const ENCODED_LEN: usize = 25usize;
22093    fn deser(
22094        _version: MavlinkVersion,
22095        __input: &[u8],
22096    ) -> Result<Self, ::mavlink_core::error::ParserError> {
22097        let avail_len = __input.len();
22098        let mut payload_buf = [0; Self::ENCODED_LEN];
22099        let mut buf = if avail_len < Self::ENCODED_LEN {
22100            payload_buf[0..avail_len].copy_from_slice(__input);
22101            Bytes::new(&payload_buf)
22102        } else {
22103            Bytes::new(__input)
22104        };
22105        let mut __struct = Self::default();
22106        __struct.time_usec = buf.get_u64_le();
22107        __struct.radius = buf.get_f32_le();
22108        __struct.x = buf.get_i32_le();
22109        __struct.y = buf.get_i32_le();
22110        __struct.z = buf.get_f32_le();
22111        let tmp = buf.get_u8();
22112        __struct.frame =
22113            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
22114                enum_type: "MavFrame",
22115                value: tmp as u32,
22116            })?;
22117        Ok(__struct)
22118    }
22119    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
22120        let mut __tmp = BytesMut::new(bytes);
22121        #[allow(clippy::absurd_extreme_comparisons)]
22122        #[allow(unused_comparisons)]
22123        if __tmp.remaining() < Self::ENCODED_LEN {
22124            panic!(
22125                "buffer is too small (need {} bytes, but got {})",
22126                Self::ENCODED_LEN,
22127                __tmp.remaining(),
22128            )
22129        }
22130        __tmp.put_u64_le(self.time_usec);
22131        __tmp.put_f32_le(self.radius);
22132        __tmp.put_i32_le(self.x);
22133        __tmp.put_i32_le(self.y);
22134        __tmp.put_f32_le(self.z);
22135        __tmp.put_u8(self.frame as u8);
22136        if matches!(version, MavlinkVersion::V2) {
22137            let len = __tmp.len();
22138            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
22139        } else {
22140            __tmp.len()
22141        }
22142    }
22143}
22144#[doc = "id: 324"]
22145#[doc = "Response from a PARAM_EXT_SET message."]
22146#[derive(Debug, Clone, PartialEq)]
22147#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
22148#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22149pub struct PARAM_EXT_ACK_DATA {
22150    #[doc = "Parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string"]
22151    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
22152    pub param_id: [u8; 16],
22153    #[doc = "Parameter value (new value if PARAM_ACK_ACCEPTED, current value otherwise)"]
22154    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
22155    pub param_value: [u8; 128],
22156    #[doc = "Parameter type."]
22157    pub param_type: MavParamExtType,
22158    #[doc = "Result code."]
22159    pub param_result: ParamAck,
22160}
22161impl PARAM_EXT_ACK_DATA {
22162    pub const ENCODED_LEN: usize = 146usize;
22163    pub const DEFAULT: Self = Self {
22164        param_id: [0_u8; 16usize],
22165        param_value: [0_u8; 128usize],
22166        param_type: MavParamExtType::DEFAULT,
22167        param_result: ParamAck::DEFAULT,
22168    };
22169    #[cfg(feature = "arbitrary")]
22170    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
22171        use arbitrary::{Arbitrary, Unstructured};
22172        let mut buf = [0u8; 1024];
22173        rng.fill_bytes(&mut buf);
22174        let mut unstructured = Unstructured::new(&buf);
22175        Self::arbitrary(&mut unstructured).unwrap_or_default()
22176    }
22177}
22178impl Default for PARAM_EXT_ACK_DATA {
22179    fn default() -> Self {
22180        Self::DEFAULT.clone()
22181    }
22182}
22183impl MessageData for PARAM_EXT_ACK_DATA {
22184    type Message = MavMessage;
22185    const ID: u32 = 324u32;
22186    const NAME: &'static str = "PARAM_EXT_ACK";
22187    const EXTRA_CRC: u8 = 132u8;
22188    const ENCODED_LEN: usize = 146usize;
22189    fn deser(
22190        _version: MavlinkVersion,
22191        __input: &[u8],
22192    ) -> Result<Self, ::mavlink_core::error::ParserError> {
22193        let avail_len = __input.len();
22194        let mut payload_buf = [0; Self::ENCODED_LEN];
22195        let mut buf = if avail_len < Self::ENCODED_LEN {
22196            payload_buf[0..avail_len].copy_from_slice(__input);
22197            Bytes::new(&payload_buf)
22198        } else {
22199            Bytes::new(__input)
22200        };
22201        let mut __struct = Self::default();
22202        for v in &mut __struct.param_id {
22203            let val = buf.get_u8();
22204            *v = val;
22205        }
22206        for v in &mut __struct.param_value {
22207            let val = buf.get_u8();
22208            *v = val;
22209        }
22210        let tmp = buf.get_u8();
22211        __struct.param_type =
22212            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
22213                enum_type: "MavParamExtType",
22214                value: tmp as u32,
22215            })?;
22216        let tmp = buf.get_u8();
22217        __struct.param_result =
22218            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
22219                enum_type: "ParamAck",
22220                value: tmp as u32,
22221            })?;
22222        Ok(__struct)
22223    }
22224    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
22225        let mut __tmp = BytesMut::new(bytes);
22226        #[allow(clippy::absurd_extreme_comparisons)]
22227        #[allow(unused_comparisons)]
22228        if __tmp.remaining() < Self::ENCODED_LEN {
22229            panic!(
22230                "buffer is too small (need {} bytes, but got {})",
22231                Self::ENCODED_LEN,
22232                __tmp.remaining(),
22233            )
22234        }
22235        for val in &self.param_id {
22236            __tmp.put_u8(*val);
22237        }
22238        for val in &self.param_value {
22239            __tmp.put_u8(*val);
22240        }
22241        __tmp.put_u8(self.param_type as u8);
22242        __tmp.put_u8(self.param_result as u8);
22243        if matches!(version, MavlinkVersion::V2) {
22244            let len = __tmp.len();
22245            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
22246        } else {
22247            __tmp.len()
22248        }
22249    }
22250}
22251#[doc = "id: 321"]
22252#[doc = "Request all parameters of this component. All parameters should be emitted in response as PARAM_EXT_VALUE."]
22253#[derive(Debug, Clone, PartialEq)]
22254#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
22255#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22256pub struct PARAM_EXT_REQUEST_LIST_DATA {
22257    #[doc = "System ID"]
22258    pub target_system: u8,
22259    #[doc = "Component ID"]
22260    pub target_component: u8,
22261}
22262impl PARAM_EXT_REQUEST_LIST_DATA {
22263    pub const ENCODED_LEN: usize = 2usize;
22264    pub const DEFAULT: Self = Self {
22265        target_system: 0_u8,
22266        target_component: 0_u8,
22267    };
22268    #[cfg(feature = "arbitrary")]
22269    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
22270        use arbitrary::{Arbitrary, Unstructured};
22271        let mut buf = [0u8; 1024];
22272        rng.fill_bytes(&mut buf);
22273        let mut unstructured = Unstructured::new(&buf);
22274        Self::arbitrary(&mut unstructured).unwrap_or_default()
22275    }
22276}
22277impl Default for PARAM_EXT_REQUEST_LIST_DATA {
22278    fn default() -> Self {
22279        Self::DEFAULT.clone()
22280    }
22281}
22282impl MessageData for PARAM_EXT_REQUEST_LIST_DATA {
22283    type Message = MavMessage;
22284    const ID: u32 = 321u32;
22285    const NAME: &'static str = "PARAM_EXT_REQUEST_LIST";
22286    const EXTRA_CRC: u8 = 88u8;
22287    const ENCODED_LEN: usize = 2usize;
22288    fn deser(
22289        _version: MavlinkVersion,
22290        __input: &[u8],
22291    ) -> Result<Self, ::mavlink_core::error::ParserError> {
22292        let avail_len = __input.len();
22293        let mut payload_buf = [0; Self::ENCODED_LEN];
22294        let mut buf = if avail_len < Self::ENCODED_LEN {
22295            payload_buf[0..avail_len].copy_from_slice(__input);
22296            Bytes::new(&payload_buf)
22297        } else {
22298            Bytes::new(__input)
22299        };
22300        let mut __struct = Self::default();
22301        __struct.target_system = buf.get_u8();
22302        __struct.target_component = buf.get_u8();
22303        Ok(__struct)
22304    }
22305    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
22306        let mut __tmp = BytesMut::new(bytes);
22307        #[allow(clippy::absurd_extreme_comparisons)]
22308        #[allow(unused_comparisons)]
22309        if __tmp.remaining() < Self::ENCODED_LEN {
22310            panic!(
22311                "buffer is too small (need {} bytes, but got {})",
22312                Self::ENCODED_LEN,
22313                __tmp.remaining(),
22314            )
22315        }
22316        __tmp.put_u8(self.target_system);
22317        __tmp.put_u8(self.target_component);
22318        if matches!(version, MavlinkVersion::V2) {
22319            let len = __tmp.len();
22320            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
22321        } else {
22322            __tmp.len()
22323        }
22324    }
22325}
22326#[doc = "id: 320"]
22327#[doc = "Request to read the value of a parameter with either the param_id string id or param_index. PARAM_EXT_VALUE should be emitted in response."]
22328#[derive(Debug, Clone, PartialEq)]
22329#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
22330#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22331pub struct PARAM_EXT_REQUEST_READ_DATA {
22332    #[doc = "Parameter index. Set to -1 to use the Parameter ID field as identifier (else param_id will be ignored)"]
22333    pub param_index: i16,
22334    #[doc = "System ID"]
22335    pub target_system: u8,
22336    #[doc = "Component ID"]
22337    pub target_component: u8,
22338    #[doc = "Parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string"]
22339    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
22340    pub param_id: [u8; 16],
22341}
22342impl PARAM_EXT_REQUEST_READ_DATA {
22343    pub const ENCODED_LEN: usize = 20usize;
22344    pub const DEFAULT: Self = Self {
22345        param_index: 0_i16,
22346        target_system: 0_u8,
22347        target_component: 0_u8,
22348        param_id: [0_u8; 16usize],
22349    };
22350    #[cfg(feature = "arbitrary")]
22351    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
22352        use arbitrary::{Arbitrary, Unstructured};
22353        let mut buf = [0u8; 1024];
22354        rng.fill_bytes(&mut buf);
22355        let mut unstructured = Unstructured::new(&buf);
22356        Self::arbitrary(&mut unstructured).unwrap_or_default()
22357    }
22358}
22359impl Default for PARAM_EXT_REQUEST_READ_DATA {
22360    fn default() -> Self {
22361        Self::DEFAULT.clone()
22362    }
22363}
22364impl MessageData for PARAM_EXT_REQUEST_READ_DATA {
22365    type Message = MavMessage;
22366    const ID: u32 = 320u32;
22367    const NAME: &'static str = "PARAM_EXT_REQUEST_READ";
22368    const EXTRA_CRC: u8 = 243u8;
22369    const ENCODED_LEN: usize = 20usize;
22370    fn deser(
22371        _version: MavlinkVersion,
22372        __input: &[u8],
22373    ) -> Result<Self, ::mavlink_core::error::ParserError> {
22374        let avail_len = __input.len();
22375        let mut payload_buf = [0; Self::ENCODED_LEN];
22376        let mut buf = if avail_len < Self::ENCODED_LEN {
22377            payload_buf[0..avail_len].copy_from_slice(__input);
22378            Bytes::new(&payload_buf)
22379        } else {
22380            Bytes::new(__input)
22381        };
22382        let mut __struct = Self::default();
22383        __struct.param_index = buf.get_i16_le();
22384        __struct.target_system = buf.get_u8();
22385        __struct.target_component = buf.get_u8();
22386        for v in &mut __struct.param_id {
22387            let val = buf.get_u8();
22388            *v = val;
22389        }
22390        Ok(__struct)
22391    }
22392    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
22393        let mut __tmp = BytesMut::new(bytes);
22394        #[allow(clippy::absurd_extreme_comparisons)]
22395        #[allow(unused_comparisons)]
22396        if __tmp.remaining() < Self::ENCODED_LEN {
22397            panic!(
22398                "buffer is too small (need {} bytes, but got {})",
22399                Self::ENCODED_LEN,
22400                __tmp.remaining(),
22401            )
22402        }
22403        __tmp.put_i16_le(self.param_index);
22404        __tmp.put_u8(self.target_system);
22405        __tmp.put_u8(self.target_component);
22406        for val in &self.param_id {
22407            __tmp.put_u8(*val);
22408        }
22409        if matches!(version, MavlinkVersion::V2) {
22410            let len = __tmp.len();
22411            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
22412        } else {
22413            __tmp.len()
22414        }
22415    }
22416}
22417#[doc = "id: 323"]
22418#[doc = "Set a parameter value. In order to deal with message loss (and retransmission of PARAM_EXT_SET), when setting a parameter value and the new value is the same as the current value, you will immediately get a PARAM_ACK_ACCEPTED response. If the current state is PARAM_ACK_IN_PROGRESS, you will accordingly receive a PARAM_ACK_IN_PROGRESS in response."]
22419#[derive(Debug, Clone, PartialEq)]
22420#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
22421#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22422pub struct PARAM_EXT_SET_DATA {
22423    #[doc = "System ID"]
22424    pub target_system: u8,
22425    #[doc = "Component ID"]
22426    pub target_component: u8,
22427    #[doc = "Parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string"]
22428    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
22429    pub param_id: [u8; 16],
22430    #[doc = "Parameter value"]
22431    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
22432    pub param_value: [u8; 128],
22433    #[doc = "Parameter type."]
22434    pub param_type: MavParamExtType,
22435}
22436impl PARAM_EXT_SET_DATA {
22437    pub const ENCODED_LEN: usize = 147usize;
22438    pub const DEFAULT: Self = Self {
22439        target_system: 0_u8,
22440        target_component: 0_u8,
22441        param_id: [0_u8; 16usize],
22442        param_value: [0_u8; 128usize],
22443        param_type: MavParamExtType::DEFAULT,
22444    };
22445    #[cfg(feature = "arbitrary")]
22446    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
22447        use arbitrary::{Arbitrary, Unstructured};
22448        let mut buf = [0u8; 1024];
22449        rng.fill_bytes(&mut buf);
22450        let mut unstructured = Unstructured::new(&buf);
22451        Self::arbitrary(&mut unstructured).unwrap_or_default()
22452    }
22453}
22454impl Default for PARAM_EXT_SET_DATA {
22455    fn default() -> Self {
22456        Self::DEFAULT.clone()
22457    }
22458}
22459impl MessageData for PARAM_EXT_SET_DATA {
22460    type Message = MavMessage;
22461    const ID: u32 = 323u32;
22462    const NAME: &'static str = "PARAM_EXT_SET";
22463    const EXTRA_CRC: u8 = 78u8;
22464    const ENCODED_LEN: usize = 147usize;
22465    fn deser(
22466        _version: MavlinkVersion,
22467        __input: &[u8],
22468    ) -> Result<Self, ::mavlink_core::error::ParserError> {
22469        let avail_len = __input.len();
22470        let mut payload_buf = [0; Self::ENCODED_LEN];
22471        let mut buf = if avail_len < Self::ENCODED_LEN {
22472            payload_buf[0..avail_len].copy_from_slice(__input);
22473            Bytes::new(&payload_buf)
22474        } else {
22475            Bytes::new(__input)
22476        };
22477        let mut __struct = Self::default();
22478        __struct.target_system = buf.get_u8();
22479        __struct.target_component = buf.get_u8();
22480        for v in &mut __struct.param_id {
22481            let val = buf.get_u8();
22482            *v = val;
22483        }
22484        for v in &mut __struct.param_value {
22485            let val = buf.get_u8();
22486            *v = val;
22487        }
22488        let tmp = buf.get_u8();
22489        __struct.param_type =
22490            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
22491                enum_type: "MavParamExtType",
22492                value: tmp as u32,
22493            })?;
22494        Ok(__struct)
22495    }
22496    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
22497        let mut __tmp = BytesMut::new(bytes);
22498        #[allow(clippy::absurd_extreme_comparisons)]
22499        #[allow(unused_comparisons)]
22500        if __tmp.remaining() < Self::ENCODED_LEN {
22501            panic!(
22502                "buffer is too small (need {} bytes, but got {})",
22503                Self::ENCODED_LEN,
22504                __tmp.remaining(),
22505            )
22506        }
22507        __tmp.put_u8(self.target_system);
22508        __tmp.put_u8(self.target_component);
22509        for val in &self.param_id {
22510            __tmp.put_u8(*val);
22511        }
22512        for val in &self.param_value {
22513            __tmp.put_u8(*val);
22514        }
22515        __tmp.put_u8(self.param_type as u8);
22516        if matches!(version, MavlinkVersion::V2) {
22517            let len = __tmp.len();
22518            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
22519        } else {
22520            __tmp.len()
22521        }
22522    }
22523}
22524#[doc = "id: 322"]
22525#[doc = "Emit the value of a parameter. The inclusion of param_count and param_index in the message allows the recipient to keep track of received parameters and allows them to re-request missing parameters after a loss or timeout."]
22526#[derive(Debug, Clone, PartialEq)]
22527#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
22528#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22529pub struct PARAM_EXT_VALUE_DATA {
22530    #[doc = "Total number of parameters"]
22531    pub param_count: u16,
22532    #[doc = "Index of this parameter"]
22533    pub param_index: u16,
22534    #[doc = "Parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string"]
22535    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
22536    pub param_id: [u8; 16],
22537    #[doc = "Parameter value"]
22538    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
22539    pub param_value: [u8; 128],
22540    #[doc = "Parameter type."]
22541    pub param_type: MavParamExtType,
22542}
22543impl PARAM_EXT_VALUE_DATA {
22544    pub const ENCODED_LEN: usize = 149usize;
22545    pub const DEFAULT: Self = Self {
22546        param_count: 0_u16,
22547        param_index: 0_u16,
22548        param_id: [0_u8; 16usize],
22549        param_value: [0_u8; 128usize],
22550        param_type: MavParamExtType::DEFAULT,
22551    };
22552    #[cfg(feature = "arbitrary")]
22553    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
22554        use arbitrary::{Arbitrary, Unstructured};
22555        let mut buf = [0u8; 1024];
22556        rng.fill_bytes(&mut buf);
22557        let mut unstructured = Unstructured::new(&buf);
22558        Self::arbitrary(&mut unstructured).unwrap_or_default()
22559    }
22560}
22561impl Default for PARAM_EXT_VALUE_DATA {
22562    fn default() -> Self {
22563        Self::DEFAULT.clone()
22564    }
22565}
22566impl MessageData for PARAM_EXT_VALUE_DATA {
22567    type Message = MavMessage;
22568    const ID: u32 = 322u32;
22569    const NAME: &'static str = "PARAM_EXT_VALUE";
22570    const EXTRA_CRC: u8 = 243u8;
22571    const ENCODED_LEN: usize = 149usize;
22572    fn deser(
22573        _version: MavlinkVersion,
22574        __input: &[u8],
22575    ) -> Result<Self, ::mavlink_core::error::ParserError> {
22576        let avail_len = __input.len();
22577        let mut payload_buf = [0; Self::ENCODED_LEN];
22578        let mut buf = if avail_len < Self::ENCODED_LEN {
22579            payload_buf[0..avail_len].copy_from_slice(__input);
22580            Bytes::new(&payload_buf)
22581        } else {
22582            Bytes::new(__input)
22583        };
22584        let mut __struct = Self::default();
22585        __struct.param_count = buf.get_u16_le();
22586        __struct.param_index = buf.get_u16_le();
22587        for v in &mut __struct.param_id {
22588            let val = buf.get_u8();
22589            *v = val;
22590        }
22591        for v in &mut __struct.param_value {
22592            let val = buf.get_u8();
22593            *v = val;
22594        }
22595        let tmp = buf.get_u8();
22596        __struct.param_type =
22597            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
22598                enum_type: "MavParamExtType",
22599                value: tmp as u32,
22600            })?;
22601        Ok(__struct)
22602    }
22603    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
22604        let mut __tmp = BytesMut::new(bytes);
22605        #[allow(clippy::absurd_extreme_comparisons)]
22606        #[allow(unused_comparisons)]
22607        if __tmp.remaining() < Self::ENCODED_LEN {
22608            panic!(
22609                "buffer is too small (need {} bytes, but got {})",
22610                Self::ENCODED_LEN,
22611                __tmp.remaining(),
22612            )
22613        }
22614        __tmp.put_u16_le(self.param_count);
22615        __tmp.put_u16_le(self.param_index);
22616        for val in &self.param_id {
22617            __tmp.put_u8(*val);
22618        }
22619        for val in &self.param_value {
22620            __tmp.put_u8(*val);
22621        }
22622        __tmp.put_u8(self.param_type as u8);
22623        if matches!(version, MavlinkVersion::V2) {
22624            let len = __tmp.len();
22625            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
22626        } else {
22627            __tmp.len()
22628        }
22629    }
22630}
22631#[doc = "id: 50"]
22632#[doc = "Bind a RC channel to a parameter. The parameter should change according to the RC channel value."]
22633#[derive(Debug, Clone, PartialEq)]
22634#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
22635#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22636pub struct PARAM_MAP_RC_DATA {
22637    #[doc = "Initial parameter value"]
22638    pub param_value0: f32,
22639    #[doc = "Scale, maps the RC range [-1, 1] to a parameter value"]
22640    pub scale: f32,
22641    #[doc = "Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation)"]
22642    pub param_value_min: f32,
22643    #[doc = "Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation)"]
22644    pub param_value_max: f32,
22645    #[doc = "Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index."]
22646    pub param_index: i16,
22647    #[doc = "System ID"]
22648    pub target_system: u8,
22649    #[doc = "Component ID"]
22650    pub target_component: u8,
22651    #[doc = "Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string"]
22652    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
22653    pub param_id: [u8; 16],
22654    #[doc = "Index of parameter RC channel. Not equal to the RC channel id. Typically corresponds to a potentiometer-knob on the RC."]
22655    pub parameter_rc_channel_index: u8,
22656}
22657impl PARAM_MAP_RC_DATA {
22658    pub const ENCODED_LEN: usize = 37usize;
22659    pub const DEFAULT: Self = Self {
22660        param_value0: 0.0_f32,
22661        scale: 0.0_f32,
22662        param_value_min: 0.0_f32,
22663        param_value_max: 0.0_f32,
22664        param_index: 0_i16,
22665        target_system: 0_u8,
22666        target_component: 0_u8,
22667        param_id: [0_u8; 16usize],
22668        parameter_rc_channel_index: 0_u8,
22669    };
22670    #[cfg(feature = "arbitrary")]
22671    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
22672        use arbitrary::{Arbitrary, Unstructured};
22673        let mut buf = [0u8; 1024];
22674        rng.fill_bytes(&mut buf);
22675        let mut unstructured = Unstructured::new(&buf);
22676        Self::arbitrary(&mut unstructured).unwrap_or_default()
22677    }
22678}
22679impl Default for PARAM_MAP_RC_DATA {
22680    fn default() -> Self {
22681        Self::DEFAULT.clone()
22682    }
22683}
22684impl MessageData for PARAM_MAP_RC_DATA {
22685    type Message = MavMessage;
22686    const ID: u32 = 50u32;
22687    const NAME: &'static str = "PARAM_MAP_RC";
22688    const EXTRA_CRC: u8 = 78u8;
22689    const ENCODED_LEN: usize = 37usize;
22690    fn deser(
22691        _version: MavlinkVersion,
22692        __input: &[u8],
22693    ) -> Result<Self, ::mavlink_core::error::ParserError> {
22694        let avail_len = __input.len();
22695        let mut payload_buf = [0; Self::ENCODED_LEN];
22696        let mut buf = if avail_len < Self::ENCODED_LEN {
22697            payload_buf[0..avail_len].copy_from_slice(__input);
22698            Bytes::new(&payload_buf)
22699        } else {
22700            Bytes::new(__input)
22701        };
22702        let mut __struct = Self::default();
22703        __struct.param_value0 = buf.get_f32_le();
22704        __struct.scale = buf.get_f32_le();
22705        __struct.param_value_min = buf.get_f32_le();
22706        __struct.param_value_max = buf.get_f32_le();
22707        __struct.param_index = buf.get_i16_le();
22708        __struct.target_system = buf.get_u8();
22709        __struct.target_component = buf.get_u8();
22710        for v in &mut __struct.param_id {
22711            let val = buf.get_u8();
22712            *v = val;
22713        }
22714        __struct.parameter_rc_channel_index = buf.get_u8();
22715        Ok(__struct)
22716    }
22717    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
22718        let mut __tmp = BytesMut::new(bytes);
22719        #[allow(clippy::absurd_extreme_comparisons)]
22720        #[allow(unused_comparisons)]
22721        if __tmp.remaining() < Self::ENCODED_LEN {
22722            panic!(
22723                "buffer is too small (need {} bytes, but got {})",
22724                Self::ENCODED_LEN,
22725                __tmp.remaining(),
22726            )
22727        }
22728        __tmp.put_f32_le(self.param_value0);
22729        __tmp.put_f32_le(self.scale);
22730        __tmp.put_f32_le(self.param_value_min);
22731        __tmp.put_f32_le(self.param_value_max);
22732        __tmp.put_i16_le(self.param_index);
22733        __tmp.put_u8(self.target_system);
22734        __tmp.put_u8(self.target_component);
22735        for val in &self.param_id {
22736            __tmp.put_u8(*val);
22737        }
22738        __tmp.put_u8(self.parameter_rc_channel_index);
22739        if matches!(version, MavlinkVersion::V2) {
22740            let len = __tmp.len();
22741            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
22742        } else {
22743            __tmp.len()
22744        }
22745    }
22746}
22747#[doc = "id: 21"]
22748#[doc = "Request all parameters of this component. After this request, all parameters are emitted. The parameter microservice is documented at <https://mavlink.io/en/services/parameter.html>."]
22749#[derive(Debug, Clone, PartialEq)]
22750#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
22751#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22752pub struct PARAM_REQUEST_LIST_DATA {
22753    #[doc = "System ID"]
22754    pub target_system: u8,
22755    #[doc = "Component ID"]
22756    pub target_component: u8,
22757}
22758impl PARAM_REQUEST_LIST_DATA {
22759    pub const ENCODED_LEN: usize = 2usize;
22760    pub const DEFAULT: Self = Self {
22761        target_system: 0_u8,
22762        target_component: 0_u8,
22763    };
22764    #[cfg(feature = "arbitrary")]
22765    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
22766        use arbitrary::{Arbitrary, Unstructured};
22767        let mut buf = [0u8; 1024];
22768        rng.fill_bytes(&mut buf);
22769        let mut unstructured = Unstructured::new(&buf);
22770        Self::arbitrary(&mut unstructured).unwrap_or_default()
22771    }
22772}
22773impl Default for PARAM_REQUEST_LIST_DATA {
22774    fn default() -> Self {
22775        Self::DEFAULT.clone()
22776    }
22777}
22778impl MessageData for PARAM_REQUEST_LIST_DATA {
22779    type Message = MavMessage;
22780    const ID: u32 = 21u32;
22781    const NAME: &'static str = "PARAM_REQUEST_LIST";
22782    const EXTRA_CRC: u8 = 159u8;
22783    const ENCODED_LEN: usize = 2usize;
22784    fn deser(
22785        _version: MavlinkVersion,
22786        __input: &[u8],
22787    ) -> Result<Self, ::mavlink_core::error::ParserError> {
22788        let avail_len = __input.len();
22789        let mut payload_buf = [0; Self::ENCODED_LEN];
22790        let mut buf = if avail_len < Self::ENCODED_LEN {
22791            payload_buf[0..avail_len].copy_from_slice(__input);
22792            Bytes::new(&payload_buf)
22793        } else {
22794            Bytes::new(__input)
22795        };
22796        let mut __struct = Self::default();
22797        __struct.target_system = buf.get_u8();
22798        __struct.target_component = buf.get_u8();
22799        Ok(__struct)
22800    }
22801    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
22802        let mut __tmp = BytesMut::new(bytes);
22803        #[allow(clippy::absurd_extreme_comparisons)]
22804        #[allow(unused_comparisons)]
22805        if __tmp.remaining() < Self::ENCODED_LEN {
22806            panic!(
22807                "buffer is too small (need {} bytes, but got {})",
22808                Self::ENCODED_LEN,
22809                __tmp.remaining(),
22810            )
22811        }
22812        __tmp.put_u8(self.target_system);
22813        __tmp.put_u8(self.target_component);
22814        if matches!(version, MavlinkVersion::V2) {
22815            let len = __tmp.len();
22816            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
22817        } else {
22818            __tmp.len()
22819        }
22820    }
22821}
22822#[doc = "id: 20"]
22823#[doc = "value[float]. This allows to send a parameter to any other component (such as the GCS) without the need of previous knowledge of possible parameter names. Thus the same GCS can store different parameters for different autopilots. See also <https://mavlink.io/en/services/parameter.html> for a full documentation of QGroundControl and IMU code."]
22824#[derive(Debug, Clone, PartialEq)]
22825#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
22826#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22827pub struct PARAM_REQUEST_READ_DATA {
22828    #[doc = "Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored)"]
22829    pub param_index: i16,
22830    #[doc = "System ID"]
22831    pub target_system: u8,
22832    #[doc = "Component ID"]
22833    pub target_component: u8,
22834    #[doc = "Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string"]
22835    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
22836    pub param_id: [u8; 16],
22837}
22838impl PARAM_REQUEST_READ_DATA {
22839    pub const ENCODED_LEN: usize = 20usize;
22840    pub const DEFAULT: Self = Self {
22841        param_index: 0_i16,
22842        target_system: 0_u8,
22843        target_component: 0_u8,
22844        param_id: [0_u8; 16usize],
22845    };
22846    #[cfg(feature = "arbitrary")]
22847    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
22848        use arbitrary::{Arbitrary, Unstructured};
22849        let mut buf = [0u8; 1024];
22850        rng.fill_bytes(&mut buf);
22851        let mut unstructured = Unstructured::new(&buf);
22852        Self::arbitrary(&mut unstructured).unwrap_or_default()
22853    }
22854}
22855impl Default for PARAM_REQUEST_READ_DATA {
22856    fn default() -> Self {
22857        Self::DEFAULT.clone()
22858    }
22859}
22860impl MessageData for PARAM_REQUEST_READ_DATA {
22861    type Message = MavMessage;
22862    const ID: u32 = 20u32;
22863    const NAME: &'static str = "PARAM_REQUEST_READ";
22864    const EXTRA_CRC: u8 = 214u8;
22865    const ENCODED_LEN: usize = 20usize;
22866    fn deser(
22867        _version: MavlinkVersion,
22868        __input: &[u8],
22869    ) -> Result<Self, ::mavlink_core::error::ParserError> {
22870        let avail_len = __input.len();
22871        let mut payload_buf = [0; Self::ENCODED_LEN];
22872        let mut buf = if avail_len < Self::ENCODED_LEN {
22873            payload_buf[0..avail_len].copy_from_slice(__input);
22874            Bytes::new(&payload_buf)
22875        } else {
22876            Bytes::new(__input)
22877        };
22878        let mut __struct = Self::default();
22879        __struct.param_index = buf.get_i16_le();
22880        __struct.target_system = buf.get_u8();
22881        __struct.target_component = buf.get_u8();
22882        for v in &mut __struct.param_id {
22883            let val = buf.get_u8();
22884            *v = val;
22885        }
22886        Ok(__struct)
22887    }
22888    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
22889        let mut __tmp = BytesMut::new(bytes);
22890        #[allow(clippy::absurd_extreme_comparisons)]
22891        #[allow(unused_comparisons)]
22892        if __tmp.remaining() < Self::ENCODED_LEN {
22893            panic!(
22894                "buffer is too small (need {} bytes, but got {})",
22895                Self::ENCODED_LEN,
22896                __tmp.remaining(),
22897            )
22898        }
22899        __tmp.put_i16_le(self.param_index);
22900        __tmp.put_u8(self.target_system);
22901        __tmp.put_u8(self.target_component);
22902        for val in &self.param_id {
22903            __tmp.put_u8(*val);
22904        }
22905        if matches!(version, MavlinkVersion::V2) {
22906            let len = __tmp.len();
22907            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
22908        } else {
22909            __tmp.len()
22910        }
22911    }
22912}
22913#[doc = "id: 23"]
22914#[doc = "Set a parameter value (write new value to permanent storage).         The receiving component should acknowledge the new parameter value by broadcasting a PARAM_VALUE message (broadcasting ensures that multiple GCS all have an up-to-date list of all parameters). If the sending GCS did not receive a PARAM_VALUE within its timeout time, it should re-send the PARAM_SET message. The parameter microservice is documented at <https://mavlink.io/en/services/parameter.html>."]
22915#[derive(Debug, Clone, PartialEq)]
22916#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
22917#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22918pub struct PARAM_SET_DATA {
22919    #[doc = "Onboard parameter value"]
22920    pub param_value: f32,
22921    #[doc = "System ID"]
22922    pub target_system: u8,
22923    #[doc = "Component ID"]
22924    pub target_component: u8,
22925    #[doc = "Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string"]
22926    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
22927    pub param_id: [u8; 16],
22928    #[doc = "Onboard parameter type."]
22929    pub param_type: MavParamType,
22930}
22931impl PARAM_SET_DATA {
22932    pub const ENCODED_LEN: usize = 23usize;
22933    pub const DEFAULT: Self = Self {
22934        param_value: 0.0_f32,
22935        target_system: 0_u8,
22936        target_component: 0_u8,
22937        param_id: [0_u8; 16usize],
22938        param_type: MavParamType::DEFAULT,
22939    };
22940    #[cfg(feature = "arbitrary")]
22941    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
22942        use arbitrary::{Arbitrary, Unstructured};
22943        let mut buf = [0u8; 1024];
22944        rng.fill_bytes(&mut buf);
22945        let mut unstructured = Unstructured::new(&buf);
22946        Self::arbitrary(&mut unstructured).unwrap_or_default()
22947    }
22948}
22949impl Default for PARAM_SET_DATA {
22950    fn default() -> Self {
22951        Self::DEFAULT.clone()
22952    }
22953}
22954impl MessageData for PARAM_SET_DATA {
22955    type Message = MavMessage;
22956    const ID: u32 = 23u32;
22957    const NAME: &'static str = "PARAM_SET";
22958    const EXTRA_CRC: u8 = 168u8;
22959    const ENCODED_LEN: usize = 23usize;
22960    fn deser(
22961        _version: MavlinkVersion,
22962        __input: &[u8],
22963    ) -> Result<Self, ::mavlink_core::error::ParserError> {
22964        let avail_len = __input.len();
22965        let mut payload_buf = [0; Self::ENCODED_LEN];
22966        let mut buf = if avail_len < Self::ENCODED_LEN {
22967            payload_buf[0..avail_len].copy_from_slice(__input);
22968            Bytes::new(&payload_buf)
22969        } else {
22970            Bytes::new(__input)
22971        };
22972        let mut __struct = Self::default();
22973        __struct.param_value = buf.get_f32_le();
22974        __struct.target_system = buf.get_u8();
22975        __struct.target_component = buf.get_u8();
22976        for v in &mut __struct.param_id {
22977            let val = buf.get_u8();
22978            *v = val;
22979        }
22980        let tmp = buf.get_u8();
22981        __struct.param_type =
22982            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
22983                enum_type: "MavParamType",
22984                value: tmp as u32,
22985            })?;
22986        Ok(__struct)
22987    }
22988    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
22989        let mut __tmp = BytesMut::new(bytes);
22990        #[allow(clippy::absurd_extreme_comparisons)]
22991        #[allow(unused_comparisons)]
22992        if __tmp.remaining() < Self::ENCODED_LEN {
22993            panic!(
22994                "buffer is too small (need {} bytes, but got {})",
22995                Self::ENCODED_LEN,
22996                __tmp.remaining(),
22997            )
22998        }
22999        __tmp.put_f32_le(self.param_value);
23000        __tmp.put_u8(self.target_system);
23001        __tmp.put_u8(self.target_component);
23002        for val in &self.param_id {
23003            __tmp.put_u8(*val);
23004        }
23005        __tmp.put_u8(self.param_type as u8);
23006        if matches!(version, MavlinkVersion::V2) {
23007            let len = __tmp.len();
23008            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
23009        } else {
23010            __tmp.len()
23011        }
23012    }
23013}
23014#[doc = "id: 22"]
23015#[doc = "Emit the value of a onboard parameter. The inclusion of param_count and param_index in the message allows the recipient to keep track of received parameters and allows him to re-request missing parameters after a loss or timeout. The parameter microservice is documented at <https://mavlink.io/en/services/parameter.html>."]
23016#[derive(Debug, Clone, PartialEq)]
23017#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
23018#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23019pub struct PARAM_VALUE_DATA {
23020    #[doc = "Onboard parameter value"]
23021    pub param_value: f32,
23022    #[doc = "Total number of onboard parameters"]
23023    pub param_count: u16,
23024    #[doc = "Index of this onboard parameter"]
23025    pub param_index: u16,
23026    #[doc = "Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string"]
23027    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
23028    pub param_id: [u8; 16],
23029    #[doc = "Onboard parameter type."]
23030    pub param_type: MavParamType,
23031}
23032impl PARAM_VALUE_DATA {
23033    pub const ENCODED_LEN: usize = 25usize;
23034    pub const DEFAULT: Self = Self {
23035        param_value: 0.0_f32,
23036        param_count: 0_u16,
23037        param_index: 0_u16,
23038        param_id: [0_u8; 16usize],
23039        param_type: MavParamType::DEFAULT,
23040    };
23041    #[cfg(feature = "arbitrary")]
23042    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
23043        use arbitrary::{Arbitrary, Unstructured};
23044        let mut buf = [0u8; 1024];
23045        rng.fill_bytes(&mut buf);
23046        let mut unstructured = Unstructured::new(&buf);
23047        Self::arbitrary(&mut unstructured).unwrap_or_default()
23048    }
23049}
23050impl Default for PARAM_VALUE_DATA {
23051    fn default() -> Self {
23052        Self::DEFAULT.clone()
23053    }
23054}
23055impl MessageData for PARAM_VALUE_DATA {
23056    type Message = MavMessage;
23057    const ID: u32 = 22u32;
23058    const NAME: &'static str = "PARAM_VALUE";
23059    const EXTRA_CRC: u8 = 220u8;
23060    const ENCODED_LEN: usize = 25usize;
23061    fn deser(
23062        _version: MavlinkVersion,
23063        __input: &[u8],
23064    ) -> Result<Self, ::mavlink_core::error::ParserError> {
23065        let avail_len = __input.len();
23066        let mut payload_buf = [0; Self::ENCODED_LEN];
23067        let mut buf = if avail_len < Self::ENCODED_LEN {
23068            payload_buf[0..avail_len].copy_from_slice(__input);
23069            Bytes::new(&payload_buf)
23070        } else {
23071            Bytes::new(__input)
23072        };
23073        let mut __struct = Self::default();
23074        __struct.param_value = buf.get_f32_le();
23075        __struct.param_count = buf.get_u16_le();
23076        __struct.param_index = buf.get_u16_le();
23077        for v in &mut __struct.param_id {
23078            let val = buf.get_u8();
23079            *v = val;
23080        }
23081        let tmp = buf.get_u8();
23082        __struct.param_type =
23083            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
23084                enum_type: "MavParamType",
23085                value: tmp as u32,
23086            })?;
23087        Ok(__struct)
23088    }
23089    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
23090        let mut __tmp = BytesMut::new(bytes);
23091        #[allow(clippy::absurd_extreme_comparisons)]
23092        #[allow(unused_comparisons)]
23093        if __tmp.remaining() < Self::ENCODED_LEN {
23094            panic!(
23095                "buffer is too small (need {} bytes, but got {})",
23096                Self::ENCODED_LEN,
23097                __tmp.remaining(),
23098            )
23099        }
23100        __tmp.put_f32_le(self.param_value);
23101        __tmp.put_u16_le(self.param_count);
23102        __tmp.put_u16_le(self.param_index);
23103        for val in &self.param_id {
23104            __tmp.put_u8(*val);
23105        }
23106        __tmp.put_u8(self.param_type as u8);
23107        if matches!(version, MavlinkVersion::V2) {
23108            let len = __tmp.len();
23109            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
23110        } else {
23111            __tmp.len()
23112        }
23113    }
23114}
23115#[deprecated = "To be removed / merged with TIMESYNC. See `TIMESYNC` (Deprecated since 2011-08)"]
23116#[doc = "id: 4"]
23117#[doc = "A ping message either requesting or responding to a ping. This allows to measure the system latencies, including serial port, radio modem and UDP connections. The ping microservice is documented at <https://mavlink.io/en/services/ping.html>."]
23118#[derive(Debug, Clone, PartialEq)]
23119#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
23120#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23121pub struct PING_DATA {
23122    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
23123    pub time_usec: u64,
23124    #[doc = "PING sequence"]
23125    pub seq: u32,
23126    #[doc = "0: request ping from all receiving systems. If greater than 0: message is a ping response and number is the system id of the requesting system"]
23127    pub target_system: u8,
23128    #[doc = "0: request ping from all receiving components. If greater than 0: message is a ping response and number is the component id of the requesting component."]
23129    pub target_component: u8,
23130}
23131impl PING_DATA {
23132    pub const ENCODED_LEN: usize = 14usize;
23133    pub const DEFAULT: Self = Self {
23134        time_usec: 0_u64,
23135        seq: 0_u32,
23136        target_system: 0_u8,
23137        target_component: 0_u8,
23138    };
23139    #[cfg(feature = "arbitrary")]
23140    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
23141        use arbitrary::{Arbitrary, Unstructured};
23142        let mut buf = [0u8; 1024];
23143        rng.fill_bytes(&mut buf);
23144        let mut unstructured = Unstructured::new(&buf);
23145        Self::arbitrary(&mut unstructured).unwrap_or_default()
23146    }
23147}
23148impl Default for PING_DATA {
23149    fn default() -> Self {
23150        Self::DEFAULT.clone()
23151    }
23152}
23153impl MessageData for PING_DATA {
23154    type Message = MavMessage;
23155    const ID: u32 = 4u32;
23156    const NAME: &'static str = "PING";
23157    const EXTRA_CRC: u8 = 237u8;
23158    const ENCODED_LEN: usize = 14usize;
23159    fn deser(
23160        _version: MavlinkVersion,
23161        __input: &[u8],
23162    ) -> Result<Self, ::mavlink_core::error::ParserError> {
23163        let avail_len = __input.len();
23164        let mut payload_buf = [0; Self::ENCODED_LEN];
23165        let mut buf = if avail_len < Self::ENCODED_LEN {
23166            payload_buf[0..avail_len].copy_from_slice(__input);
23167            Bytes::new(&payload_buf)
23168        } else {
23169            Bytes::new(__input)
23170        };
23171        let mut __struct = Self::default();
23172        __struct.time_usec = buf.get_u64_le();
23173        __struct.seq = buf.get_u32_le();
23174        __struct.target_system = buf.get_u8();
23175        __struct.target_component = buf.get_u8();
23176        Ok(__struct)
23177    }
23178    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
23179        let mut __tmp = BytesMut::new(bytes);
23180        #[allow(clippy::absurd_extreme_comparisons)]
23181        #[allow(unused_comparisons)]
23182        if __tmp.remaining() < Self::ENCODED_LEN {
23183            panic!(
23184                "buffer is too small (need {} bytes, but got {})",
23185                Self::ENCODED_LEN,
23186                __tmp.remaining(),
23187            )
23188        }
23189        __tmp.put_u64_le(self.time_usec);
23190        __tmp.put_u32_le(self.seq);
23191        __tmp.put_u8(self.target_system);
23192        __tmp.put_u8(self.target_component);
23193        if matches!(version, MavlinkVersion::V2) {
23194            let len = __tmp.len();
23195            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
23196        } else {
23197            __tmp.len()
23198        }
23199    }
23200}
23201#[deprecated = "New version explicitly defines format. More interoperable. See `PLAY_TUNE_V2` (Deprecated since 2019-10)"]
23202#[doc = "id: 258"]
23203#[doc = "Control vehicle tone generation (buzzer)."]
23204#[derive(Debug, Clone, PartialEq)]
23205#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
23206#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23207pub struct PLAY_TUNE_DATA {
23208    #[doc = "System ID"]
23209    pub target_system: u8,
23210    #[doc = "Component ID"]
23211    pub target_component: u8,
23212    #[doc = "tune in board specific format"]
23213    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
23214    pub tune: [u8; 30],
23215    #[doc = "tune extension (appended to tune)"]
23216    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
23217    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
23218    pub tune2: [u8; 200],
23219}
23220impl PLAY_TUNE_DATA {
23221    pub const ENCODED_LEN: usize = 232usize;
23222    pub const DEFAULT: Self = Self {
23223        target_system: 0_u8,
23224        target_component: 0_u8,
23225        tune: [0_u8; 30usize],
23226        tune2: [0_u8; 200usize],
23227    };
23228    #[cfg(feature = "arbitrary")]
23229    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
23230        use arbitrary::{Arbitrary, Unstructured};
23231        let mut buf = [0u8; 1024];
23232        rng.fill_bytes(&mut buf);
23233        let mut unstructured = Unstructured::new(&buf);
23234        Self::arbitrary(&mut unstructured).unwrap_or_default()
23235    }
23236}
23237impl Default for PLAY_TUNE_DATA {
23238    fn default() -> Self {
23239        Self::DEFAULT.clone()
23240    }
23241}
23242impl MessageData for PLAY_TUNE_DATA {
23243    type Message = MavMessage;
23244    const ID: u32 = 258u32;
23245    const NAME: &'static str = "PLAY_TUNE";
23246    const EXTRA_CRC: u8 = 187u8;
23247    const ENCODED_LEN: usize = 232usize;
23248    fn deser(
23249        _version: MavlinkVersion,
23250        __input: &[u8],
23251    ) -> Result<Self, ::mavlink_core::error::ParserError> {
23252        let avail_len = __input.len();
23253        let mut payload_buf = [0; Self::ENCODED_LEN];
23254        let mut buf = if avail_len < Self::ENCODED_LEN {
23255            payload_buf[0..avail_len].copy_from_slice(__input);
23256            Bytes::new(&payload_buf)
23257        } else {
23258            Bytes::new(__input)
23259        };
23260        let mut __struct = Self::default();
23261        __struct.target_system = buf.get_u8();
23262        __struct.target_component = buf.get_u8();
23263        for v in &mut __struct.tune {
23264            let val = buf.get_u8();
23265            *v = val;
23266        }
23267        for v in &mut __struct.tune2 {
23268            let val = buf.get_u8();
23269            *v = val;
23270        }
23271        Ok(__struct)
23272    }
23273    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
23274        let mut __tmp = BytesMut::new(bytes);
23275        #[allow(clippy::absurd_extreme_comparisons)]
23276        #[allow(unused_comparisons)]
23277        if __tmp.remaining() < Self::ENCODED_LEN {
23278            panic!(
23279                "buffer is too small (need {} bytes, but got {})",
23280                Self::ENCODED_LEN,
23281                __tmp.remaining(),
23282            )
23283        }
23284        __tmp.put_u8(self.target_system);
23285        __tmp.put_u8(self.target_component);
23286        for val in &self.tune {
23287            __tmp.put_u8(*val);
23288        }
23289        for val in &self.tune2 {
23290            __tmp.put_u8(*val);
23291        }
23292        if matches!(version, MavlinkVersion::V2) {
23293            let len = __tmp.len();
23294            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
23295        } else {
23296            __tmp.len()
23297        }
23298    }
23299}
23300#[doc = "id: 400"]
23301#[doc = "Play vehicle tone/tune (buzzer). Supersedes message PLAY_TUNE."]
23302#[derive(Debug, Clone, PartialEq)]
23303#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
23304#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23305pub struct PLAY_TUNE_V2_DATA {
23306    #[doc = "Tune format"]
23307    pub format: TuneFormat,
23308    #[doc = "System ID"]
23309    pub target_system: u8,
23310    #[doc = "Component ID"]
23311    pub target_component: u8,
23312    #[doc = "Tune definition as a NULL-terminated string."]
23313    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
23314    pub tune: [u8; 248],
23315}
23316impl PLAY_TUNE_V2_DATA {
23317    pub const ENCODED_LEN: usize = 254usize;
23318    pub const DEFAULT: Self = Self {
23319        format: TuneFormat::DEFAULT,
23320        target_system: 0_u8,
23321        target_component: 0_u8,
23322        tune: [0_u8; 248usize],
23323    };
23324    #[cfg(feature = "arbitrary")]
23325    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
23326        use arbitrary::{Arbitrary, Unstructured};
23327        let mut buf = [0u8; 1024];
23328        rng.fill_bytes(&mut buf);
23329        let mut unstructured = Unstructured::new(&buf);
23330        Self::arbitrary(&mut unstructured).unwrap_or_default()
23331    }
23332}
23333impl Default for PLAY_TUNE_V2_DATA {
23334    fn default() -> Self {
23335        Self::DEFAULT.clone()
23336    }
23337}
23338impl MessageData for PLAY_TUNE_V2_DATA {
23339    type Message = MavMessage;
23340    const ID: u32 = 400u32;
23341    const NAME: &'static str = "PLAY_TUNE_V2";
23342    const EXTRA_CRC: u8 = 110u8;
23343    const ENCODED_LEN: usize = 254usize;
23344    fn deser(
23345        _version: MavlinkVersion,
23346        __input: &[u8],
23347    ) -> Result<Self, ::mavlink_core::error::ParserError> {
23348        let avail_len = __input.len();
23349        let mut payload_buf = [0; Self::ENCODED_LEN];
23350        let mut buf = if avail_len < Self::ENCODED_LEN {
23351            payload_buf[0..avail_len].copy_from_slice(__input);
23352            Bytes::new(&payload_buf)
23353        } else {
23354            Bytes::new(__input)
23355        };
23356        let mut __struct = Self::default();
23357        let tmp = buf.get_u32_le();
23358        __struct.format = FromPrimitive::from_u32(tmp).ok_or(
23359            ::mavlink_core::error::ParserError::InvalidEnum {
23360                enum_type: "TuneFormat",
23361                value: tmp as u32,
23362            },
23363        )?;
23364        __struct.target_system = buf.get_u8();
23365        __struct.target_component = buf.get_u8();
23366        for v in &mut __struct.tune {
23367            let val = buf.get_u8();
23368            *v = val;
23369        }
23370        Ok(__struct)
23371    }
23372    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
23373        let mut __tmp = BytesMut::new(bytes);
23374        #[allow(clippy::absurd_extreme_comparisons)]
23375        #[allow(unused_comparisons)]
23376        if __tmp.remaining() < Self::ENCODED_LEN {
23377            panic!(
23378                "buffer is too small (need {} bytes, but got {})",
23379                Self::ENCODED_LEN,
23380                __tmp.remaining(),
23381            )
23382        }
23383        __tmp.put_u32_le(self.format as u32);
23384        __tmp.put_u8(self.target_system);
23385        __tmp.put_u8(self.target_component);
23386        for val in &self.tune {
23387            __tmp.put_u8(*val);
23388        }
23389        if matches!(version, MavlinkVersion::V2) {
23390            let len = __tmp.len();
23391            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
23392        } else {
23393            __tmp.len()
23394        }
23395    }
23396}
23397#[doc = "id: 87"]
23398#[doc = "Reports the current commanded vehicle position, velocity, and acceleration as specified by the autopilot. This should match the commands sent in SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being controlled this way."]
23399#[derive(Debug, Clone, PartialEq)]
23400#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
23401#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23402pub struct POSITION_TARGET_GLOBAL_INT_DATA {
23403    #[doc = "Timestamp (time since system boot). The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency."]
23404    pub time_boot_ms: u32,
23405    #[doc = "Latitude in WGS84 frame"]
23406    pub lat_int: i32,
23407    #[doc = "Longitude in WGS84 frame"]
23408    pub lon_int: i32,
23409    #[doc = "Altitude (MSL, AGL or relative to home altitude, depending on frame)"]
23410    pub alt: f32,
23411    #[doc = "X velocity in NED frame"]
23412    pub vx: f32,
23413    #[doc = "Y velocity in NED frame"]
23414    pub vy: f32,
23415    #[doc = "Z velocity in NED frame"]
23416    pub vz: f32,
23417    #[doc = "X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N"]
23418    pub afx: f32,
23419    #[doc = "Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N"]
23420    pub afy: f32,
23421    #[doc = "Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N"]
23422    pub afz: f32,
23423    #[doc = "yaw setpoint"]
23424    pub yaw: f32,
23425    #[doc = "yaw rate setpoint"]
23426    pub yaw_rate: f32,
23427    #[doc = "Bitmap to indicate which dimensions should be ignored by the vehicle."]
23428    pub type_mask: PositionTargetTypemask,
23429    #[doc = "Valid options are: MAV_FRAME_GLOBAL = 0, MAV_FRAME_GLOBAL_RELATIVE_ALT = 3, MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 (MAV_FRAME_GLOBAL_INT, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT are allowed synonyms, but have been deprecated)"]
23430    pub coordinate_frame: MavFrame,
23431}
23432impl POSITION_TARGET_GLOBAL_INT_DATA {
23433    pub const ENCODED_LEN: usize = 51usize;
23434    pub const DEFAULT: Self = Self {
23435        time_boot_ms: 0_u32,
23436        lat_int: 0_i32,
23437        lon_int: 0_i32,
23438        alt: 0.0_f32,
23439        vx: 0.0_f32,
23440        vy: 0.0_f32,
23441        vz: 0.0_f32,
23442        afx: 0.0_f32,
23443        afy: 0.0_f32,
23444        afz: 0.0_f32,
23445        yaw: 0.0_f32,
23446        yaw_rate: 0.0_f32,
23447        type_mask: PositionTargetTypemask::DEFAULT,
23448        coordinate_frame: MavFrame::DEFAULT,
23449    };
23450    #[cfg(feature = "arbitrary")]
23451    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
23452        use arbitrary::{Arbitrary, Unstructured};
23453        let mut buf = [0u8; 1024];
23454        rng.fill_bytes(&mut buf);
23455        let mut unstructured = Unstructured::new(&buf);
23456        Self::arbitrary(&mut unstructured).unwrap_or_default()
23457    }
23458}
23459impl Default for POSITION_TARGET_GLOBAL_INT_DATA {
23460    fn default() -> Self {
23461        Self::DEFAULT.clone()
23462    }
23463}
23464impl MessageData for POSITION_TARGET_GLOBAL_INT_DATA {
23465    type Message = MavMessage;
23466    const ID: u32 = 87u32;
23467    const NAME: &'static str = "POSITION_TARGET_GLOBAL_INT";
23468    const EXTRA_CRC: u8 = 150u8;
23469    const ENCODED_LEN: usize = 51usize;
23470    fn deser(
23471        _version: MavlinkVersion,
23472        __input: &[u8],
23473    ) -> Result<Self, ::mavlink_core::error::ParserError> {
23474        let avail_len = __input.len();
23475        let mut payload_buf = [0; Self::ENCODED_LEN];
23476        let mut buf = if avail_len < Self::ENCODED_LEN {
23477            payload_buf[0..avail_len].copy_from_slice(__input);
23478            Bytes::new(&payload_buf)
23479        } else {
23480            Bytes::new(__input)
23481        };
23482        let mut __struct = Self::default();
23483        __struct.time_boot_ms = buf.get_u32_le();
23484        __struct.lat_int = buf.get_i32_le();
23485        __struct.lon_int = buf.get_i32_le();
23486        __struct.alt = buf.get_f32_le();
23487        __struct.vx = buf.get_f32_le();
23488        __struct.vy = buf.get_f32_le();
23489        __struct.vz = buf.get_f32_le();
23490        __struct.afx = buf.get_f32_le();
23491        __struct.afy = buf.get_f32_le();
23492        __struct.afz = buf.get_f32_le();
23493        __struct.yaw = buf.get_f32_le();
23494        __struct.yaw_rate = buf.get_f32_le();
23495        let tmp = buf.get_u16_le();
23496        __struct.type_mask = PositionTargetTypemask::from_bits(
23497            tmp & PositionTargetTypemask::all().bits(),
23498        )
23499        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
23500            flag_type: "PositionTargetTypemask",
23501            value: tmp as u32,
23502        })?;
23503        let tmp = buf.get_u8();
23504        __struct.coordinate_frame =
23505            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
23506                enum_type: "MavFrame",
23507                value: tmp as u32,
23508            })?;
23509        Ok(__struct)
23510    }
23511    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
23512        let mut __tmp = BytesMut::new(bytes);
23513        #[allow(clippy::absurd_extreme_comparisons)]
23514        #[allow(unused_comparisons)]
23515        if __tmp.remaining() < Self::ENCODED_LEN {
23516            panic!(
23517                "buffer is too small (need {} bytes, but got {})",
23518                Self::ENCODED_LEN,
23519                __tmp.remaining(),
23520            )
23521        }
23522        __tmp.put_u32_le(self.time_boot_ms);
23523        __tmp.put_i32_le(self.lat_int);
23524        __tmp.put_i32_le(self.lon_int);
23525        __tmp.put_f32_le(self.alt);
23526        __tmp.put_f32_le(self.vx);
23527        __tmp.put_f32_le(self.vy);
23528        __tmp.put_f32_le(self.vz);
23529        __tmp.put_f32_le(self.afx);
23530        __tmp.put_f32_le(self.afy);
23531        __tmp.put_f32_le(self.afz);
23532        __tmp.put_f32_le(self.yaw);
23533        __tmp.put_f32_le(self.yaw_rate);
23534        __tmp.put_u16_le(self.type_mask.bits());
23535        __tmp.put_u8(self.coordinate_frame as u8);
23536        if matches!(version, MavlinkVersion::V2) {
23537            let len = __tmp.len();
23538            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
23539        } else {
23540            __tmp.len()
23541        }
23542    }
23543}
23544#[doc = "id: 85"]
23545#[doc = "Reports the current commanded vehicle position, velocity, and acceleration as specified by the autopilot. This should match the commands sent in SET_POSITION_TARGET_LOCAL_NED if the vehicle is being controlled this way."]
23546#[derive(Debug, Clone, PartialEq)]
23547#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
23548#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23549pub struct POSITION_TARGET_LOCAL_NED_DATA {
23550    #[doc = "Timestamp (time since system boot)."]
23551    pub time_boot_ms: u32,
23552    #[doc = "X Position in NED frame"]
23553    pub x: f32,
23554    #[doc = "Y Position in NED frame"]
23555    pub y: f32,
23556    #[doc = "Z Position in NED frame (note, altitude is negative in NED)"]
23557    pub z: f32,
23558    #[doc = "X velocity in NED frame"]
23559    pub vx: f32,
23560    #[doc = "Y velocity in NED frame"]
23561    pub vy: f32,
23562    #[doc = "Z velocity in NED frame"]
23563    pub vz: f32,
23564    #[doc = "X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N"]
23565    pub afx: f32,
23566    #[doc = "Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N"]
23567    pub afy: f32,
23568    #[doc = "Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N"]
23569    pub afz: f32,
23570    #[doc = "yaw setpoint"]
23571    pub yaw: f32,
23572    #[doc = "yaw rate setpoint"]
23573    pub yaw_rate: f32,
23574    #[doc = "Bitmap to indicate which dimensions should be ignored by the vehicle."]
23575    pub type_mask: PositionTargetTypemask,
23576    #[doc = "Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9"]
23577    pub coordinate_frame: MavFrame,
23578}
23579impl POSITION_TARGET_LOCAL_NED_DATA {
23580    pub const ENCODED_LEN: usize = 51usize;
23581    pub const DEFAULT: Self = Self {
23582        time_boot_ms: 0_u32,
23583        x: 0.0_f32,
23584        y: 0.0_f32,
23585        z: 0.0_f32,
23586        vx: 0.0_f32,
23587        vy: 0.0_f32,
23588        vz: 0.0_f32,
23589        afx: 0.0_f32,
23590        afy: 0.0_f32,
23591        afz: 0.0_f32,
23592        yaw: 0.0_f32,
23593        yaw_rate: 0.0_f32,
23594        type_mask: PositionTargetTypemask::DEFAULT,
23595        coordinate_frame: MavFrame::DEFAULT,
23596    };
23597    #[cfg(feature = "arbitrary")]
23598    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
23599        use arbitrary::{Arbitrary, Unstructured};
23600        let mut buf = [0u8; 1024];
23601        rng.fill_bytes(&mut buf);
23602        let mut unstructured = Unstructured::new(&buf);
23603        Self::arbitrary(&mut unstructured).unwrap_or_default()
23604    }
23605}
23606impl Default for POSITION_TARGET_LOCAL_NED_DATA {
23607    fn default() -> Self {
23608        Self::DEFAULT.clone()
23609    }
23610}
23611impl MessageData for POSITION_TARGET_LOCAL_NED_DATA {
23612    type Message = MavMessage;
23613    const ID: u32 = 85u32;
23614    const NAME: &'static str = "POSITION_TARGET_LOCAL_NED";
23615    const EXTRA_CRC: u8 = 140u8;
23616    const ENCODED_LEN: usize = 51usize;
23617    fn deser(
23618        _version: MavlinkVersion,
23619        __input: &[u8],
23620    ) -> Result<Self, ::mavlink_core::error::ParserError> {
23621        let avail_len = __input.len();
23622        let mut payload_buf = [0; Self::ENCODED_LEN];
23623        let mut buf = if avail_len < Self::ENCODED_LEN {
23624            payload_buf[0..avail_len].copy_from_slice(__input);
23625            Bytes::new(&payload_buf)
23626        } else {
23627            Bytes::new(__input)
23628        };
23629        let mut __struct = Self::default();
23630        __struct.time_boot_ms = buf.get_u32_le();
23631        __struct.x = buf.get_f32_le();
23632        __struct.y = buf.get_f32_le();
23633        __struct.z = buf.get_f32_le();
23634        __struct.vx = buf.get_f32_le();
23635        __struct.vy = buf.get_f32_le();
23636        __struct.vz = buf.get_f32_le();
23637        __struct.afx = buf.get_f32_le();
23638        __struct.afy = buf.get_f32_le();
23639        __struct.afz = buf.get_f32_le();
23640        __struct.yaw = buf.get_f32_le();
23641        __struct.yaw_rate = buf.get_f32_le();
23642        let tmp = buf.get_u16_le();
23643        __struct.type_mask = PositionTargetTypemask::from_bits(
23644            tmp & PositionTargetTypemask::all().bits(),
23645        )
23646        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
23647            flag_type: "PositionTargetTypemask",
23648            value: tmp as u32,
23649        })?;
23650        let tmp = buf.get_u8();
23651        __struct.coordinate_frame =
23652            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
23653                enum_type: "MavFrame",
23654                value: tmp as u32,
23655            })?;
23656        Ok(__struct)
23657    }
23658    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
23659        let mut __tmp = BytesMut::new(bytes);
23660        #[allow(clippy::absurd_extreme_comparisons)]
23661        #[allow(unused_comparisons)]
23662        if __tmp.remaining() < Self::ENCODED_LEN {
23663            panic!(
23664                "buffer is too small (need {} bytes, but got {})",
23665                Self::ENCODED_LEN,
23666                __tmp.remaining(),
23667            )
23668        }
23669        __tmp.put_u32_le(self.time_boot_ms);
23670        __tmp.put_f32_le(self.x);
23671        __tmp.put_f32_le(self.y);
23672        __tmp.put_f32_le(self.z);
23673        __tmp.put_f32_le(self.vx);
23674        __tmp.put_f32_le(self.vy);
23675        __tmp.put_f32_le(self.vz);
23676        __tmp.put_f32_le(self.afx);
23677        __tmp.put_f32_le(self.afy);
23678        __tmp.put_f32_le(self.afz);
23679        __tmp.put_f32_le(self.yaw);
23680        __tmp.put_f32_le(self.yaw_rate);
23681        __tmp.put_u16_le(self.type_mask.bits());
23682        __tmp.put_u8(self.coordinate_frame as u8);
23683        if matches!(version, MavlinkVersion::V2) {
23684            let len = __tmp.len();
23685            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
23686        } else {
23687            __tmp.len()
23688        }
23689    }
23690}
23691#[doc = "id: 125"]
23692#[doc = "Power supply status."]
23693#[derive(Debug, Clone, PartialEq)]
23694#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
23695#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23696pub struct POWER_STATUS_DATA {
23697    #[doc = "5V rail voltage."]
23698    pub Vcc: u16,
23699    #[doc = "Servo rail voltage."]
23700    pub Vservo: u16,
23701    #[doc = "Bitmap of power supply status flags."]
23702    pub flags: MavPowerStatus,
23703}
23704impl POWER_STATUS_DATA {
23705    pub const ENCODED_LEN: usize = 6usize;
23706    pub const DEFAULT: Self = Self {
23707        Vcc: 0_u16,
23708        Vservo: 0_u16,
23709        flags: MavPowerStatus::DEFAULT,
23710    };
23711    #[cfg(feature = "arbitrary")]
23712    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
23713        use arbitrary::{Arbitrary, Unstructured};
23714        let mut buf = [0u8; 1024];
23715        rng.fill_bytes(&mut buf);
23716        let mut unstructured = Unstructured::new(&buf);
23717        Self::arbitrary(&mut unstructured).unwrap_or_default()
23718    }
23719}
23720impl Default for POWER_STATUS_DATA {
23721    fn default() -> Self {
23722        Self::DEFAULT.clone()
23723    }
23724}
23725impl MessageData for POWER_STATUS_DATA {
23726    type Message = MavMessage;
23727    const ID: u32 = 125u32;
23728    const NAME: &'static str = "POWER_STATUS";
23729    const EXTRA_CRC: u8 = 203u8;
23730    const ENCODED_LEN: usize = 6usize;
23731    fn deser(
23732        _version: MavlinkVersion,
23733        __input: &[u8],
23734    ) -> Result<Self, ::mavlink_core::error::ParserError> {
23735        let avail_len = __input.len();
23736        let mut payload_buf = [0; Self::ENCODED_LEN];
23737        let mut buf = if avail_len < Self::ENCODED_LEN {
23738            payload_buf[0..avail_len].copy_from_slice(__input);
23739            Bytes::new(&payload_buf)
23740        } else {
23741            Bytes::new(__input)
23742        };
23743        let mut __struct = Self::default();
23744        __struct.Vcc = buf.get_u16_le();
23745        __struct.Vservo = buf.get_u16_le();
23746        let tmp = buf.get_u16_le();
23747        __struct.flags = MavPowerStatus::from_bits(tmp & MavPowerStatus::all().bits()).ok_or(
23748            ::mavlink_core::error::ParserError::InvalidFlag {
23749                flag_type: "MavPowerStatus",
23750                value: tmp as u32,
23751            },
23752        )?;
23753        Ok(__struct)
23754    }
23755    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
23756        let mut __tmp = BytesMut::new(bytes);
23757        #[allow(clippy::absurd_extreme_comparisons)]
23758        #[allow(unused_comparisons)]
23759        if __tmp.remaining() < Self::ENCODED_LEN {
23760            panic!(
23761                "buffer is too small (need {} bytes, but got {})",
23762                Self::ENCODED_LEN,
23763                __tmp.remaining(),
23764            )
23765        }
23766        __tmp.put_u16_le(self.Vcc);
23767        __tmp.put_u16_le(self.Vservo);
23768        __tmp.put_u16_le(self.flags.bits());
23769        if matches!(version, MavlinkVersion::V2) {
23770            let len = __tmp.len();
23771            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
23772        } else {
23773            __tmp.len()
23774        }
23775    }
23776}
23777#[doc = "id: 300"]
23778#[doc = "Version and capability of protocol version. This message can be requested with MAV_CMD_REQUEST_MESSAGE and is used as part of the handshaking to establish which MAVLink version should be used on the network. Every node should respond to a request for PROTOCOL_VERSION to enable the handshaking. Library implementers should consider adding this into the default decoding state machine to allow the protocol core to respond directly."]
23779#[derive(Debug, Clone, PartialEq)]
23780#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
23781#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23782pub struct PROTOCOL_VERSION_DATA {
23783    #[doc = "Currently active MAVLink version number * 100: v1.0 is 100, v2.0 is 200, etc."]
23784    pub version: u16,
23785    #[doc = "Minimum MAVLink version supported"]
23786    pub min_version: u16,
23787    #[doc = "Maximum MAVLink version supported (set to the same value as version by default)"]
23788    pub max_version: u16,
23789    #[doc = "The first 8 bytes (not characters printed in hex!) of the git hash."]
23790    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
23791    pub spec_version_hash: [u8; 8],
23792    #[doc = "The first 8 bytes (not characters printed in hex!) of the git hash."]
23793    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
23794    pub library_version_hash: [u8; 8],
23795}
23796impl PROTOCOL_VERSION_DATA {
23797    pub const ENCODED_LEN: usize = 22usize;
23798    pub const DEFAULT: Self = Self {
23799        version: 0_u16,
23800        min_version: 0_u16,
23801        max_version: 0_u16,
23802        spec_version_hash: [0_u8; 8usize],
23803        library_version_hash: [0_u8; 8usize],
23804    };
23805    #[cfg(feature = "arbitrary")]
23806    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
23807        use arbitrary::{Arbitrary, Unstructured};
23808        let mut buf = [0u8; 1024];
23809        rng.fill_bytes(&mut buf);
23810        let mut unstructured = Unstructured::new(&buf);
23811        Self::arbitrary(&mut unstructured).unwrap_or_default()
23812    }
23813}
23814impl Default for PROTOCOL_VERSION_DATA {
23815    fn default() -> Self {
23816        Self::DEFAULT.clone()
23817    }
23818}
23819impl MessageData for PROTOCOL_VERSION_DATA {
23820    type Message = MavMessage;
23821    const ID: u32 = 300u32;
23822    const NAME: &'static str = "PROTOCOL_VERSION";
23823    const EXTRA_CRC: u8 = 217u8;
23824    const ENCODED_LEN: usize = 22usize;
23825    fn deser(
23826        _version: MavlinkVersion,
23827        __input: &[u8],
23828    ) -> Result<Self, ::mavlink_core::error::ParserError> {
23829        let avail_len = __input.len();
23830        let mut payload_buf = [0; Self::ENCODED_LEN];
23831        let mut buf = if avail_len < Self::ENCODED_LEN {
23832            payload_buf[0..avail_len].copy_from_slice(__input);
23833            Bytes::new(&payload_buf)
23834        } else {
23835            Bytes::new(__input)
23836        };
23837        let mut __struct = Self::default();
23838        __struct.version = buf.get_u16_le();
23839        __struct.min_version = buf.get_u16_le();
23840        __struct.max_version = buf.get_u16_le();
23841        for v in &mut __struct.spec_version_hash {
23842            let val = buf.get_u8();
23843            *v = val;
23844        }
23845        for v in &mut __struct.library_version_hash {
23846            let val = buf.get_u8();
23847            *v = val;
23848        }
23849        Ok(__struct)
23850    }
23851    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
23852        let mut __tmp = BytesMut::new(bytes);
23853        #[allow(clippy::absurd_extreme_comparisons)]
23854        #[allow(unused_comparisons)]
23855        if __tmp.remaining() < Self::ENCODED_LEN {
23856            panic!(
23857                "buffer is too small (need {} bytes, but got {})",
23858                Self::ENCODED_LEN,
23859                __tmp.remaining(),
23860            )
23861        }
23862        __tmp.put_u16_le(self.version);
23863        __tmp.put_u16_le(self.min_version);
23864        __tmp.put_u16_le(self.max_version);
23865        for val in &self.spec_version_hash {
23866            __tmp.put_u8(*val);
23867        }
23868        for val in &self.library_version_hash {
23869            __tmp.put_u8(*val);
23870        }
23871        if matches!(version, MavlinkVersion::V2) {
23872            let len = __tmp.len();
23873            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
23874        } else {
23875            __tmp.len()
23876        }
23877    }
23878}
23879#[doc = "id: 109"]
23880#[doc = "Status generated by radio and injected into MAVLink stream."]
23881#[derive(Debug, Clone, PartialEq)]
23882#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
23883#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23884pub struct RADIO_STATUS_DATA {
23885    #[doc = "Count of radio packet receive errors (since boot)."]
23886    pub rxerrors: u16,
23887    #[doc = "Count of error corrected radio packets (since boot)."]
23888    pub fixed: u16,
23889    #[doc = "Local (message sender) received signal strength indication in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown."]
23890    pub rssi: u8,
23891    #[doc = "Remote (message receiver) signal strength indication in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown."]
23892    pub remrssi: u8,
23893    #[doc = "Remaining free transmitter buffer space."]
23894    pub txbuf: u8,
23895    #[doc = "Local background noise level. These are device dependent RSSI values (scale as approx 2x dB on SiK radios). Values: [0-254], UINT8_MAX: invalid/unknown."]
23896    pub noise: u8,
23897    #[doc = "Remote background noise level. These are device dependent RSSI values (scale as approx 2x dB on SiK radios). Values: [0-254], UINT8_MAX: invalid/unknown."]
23898    pub remnoise: u8,
23899}
23900impl RADIO_STATUS_DATA {
23901    pub const ENCODED_LEN: usize = 9usize;
23902    pub const DEFAULT: Self = Self {
23903        rxerrors: 0_u16,
23904        fixed: 0_u16,
23905        rssi: 0_u8,
23906        remrssi: 0_u8,
23907        txbuf: 0_u8,
23908        noise: 0_u8,
23909        remnoise: 0_u8,
23910    };
23911    #[cfg(feature = "arbitrary")]
23912    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
23913        use arbitrary::{Arbitrary, Unstructured};
23914        let mut buf = [0u8; 1024];
23915        rng.fill_bytes(&mut buf);
23916        let mut unstructured = Unstructured::new(&buf);
23917        Self::arbitrary(&mut unstructured).unwrap_or_default()
23918    }
23919}
23920impl Default for RADIO_STATUS_DATA {
23921    fn default() -> Self {
23922        Self::DEFAULT.clone()
23923    }
23924}
23925impl MessageData for RADIO_STATUS_DATA {
23926    type Message = MavMessage;
23927    const ID: u32 = 109u32;
23928    const NAME: &'static str = "RADIO_STATUS";
23929    const EXTRA_CRC: u8 = 185u8;
23930    const ENCODED_LEN: usize = 9usize;
23931    fn deser(
23932        _version: MavlinkVersion,
23933        __input: &[u8],
23934    ) -> Result<Self, ::mavlink_core::error::ParserError> {
23935        let avail_len = __input.len();
23936        let mut payload_buf = [0; Self::ENCODED_LEN];
23937        let mut buf = if avail_len < Self::ENCODED_LEN {
23938            payload_buf[0..avail_len].copy_from_slice(__input);
23939            Bytes::new(&payload_buf)
23940        } else {
23941            Bytes::new(__input)
23942        };
23943        let mut __struct = Self::default();
23944        __struct.rxerrors = buf.get_u16_le();
23945        __struct.fixed = buf.get_u16_le();
23946        __struct.rssi = buf.get_u8();
23947        __struct.remrssi = buf.get_u8();
23948        __struct.txbuf = buf.get_u8();
23949        __struct.noise = buf.get_u8();
23950        __struct.remnoise = buf.get_u8();
23951        Ok(__struct)
23952    }
23953    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
23954        let mut __tmp = BytesMut::new(bytes);
23955        #[allow(clippy::absurd_extreme_comparisons)]
23956        #[allow(unused_comparisons)]
23957        if __tmp.remaining() < Self::ENCODED_LEN {
23958            panic!(
23959                "buffer is too small (need {} bytes, but got {})",
23960                Self::ENCODED_LEN,
23961                __tmp.remaining(),
23962            )
23963        }
23964        __tmp.put_u16_le(self.rxerrors);
23965        __tmp.put_u16_le(self.fixed);
23966        __tmp.put_u8(self.rssi);
23967        __tmp.put_u8(self.remrssi);
23968        __tmp.put_u8(self.txbuf);
23969        __tmp.put_u8(self.noise);
23970        __tmp.put_u8(self.remnoise);
23971        if matches!(version, MavlinkVersion::V2) {
23972            let len = __tmp.len();
23973            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
23974        } else {
23975            __tmp.len()
23976        }
23977    }
23978}
23979#[doc = "id: 27"]
23980#[doc = "The RAW IMU readings for a 9DOF sensor, which is identified by the id (default IMU1). This message should always contain the true raw values without any scaling to allow data capture and system debugging."]
23981#[derive(Debug, Clone, PartialEq)]
23982#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
23983#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23984pub struct RAW_IMU_DATA {
23985    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
23986    pub time_usec: u64,
23987    #[doc = "X acceleration (raw)"]
23988    pub xacc: i16,
23989    #[doc = "Y acceleration (raw)"]
23990    pub yacc: i16,
23991    #[doc = "Z acceleration (raw)"]
23992    pub zacc: i16,
23993    #[doc = "Angular speed around X axis (raw)"]
23994    pub xgyro: i16,
23995    #[doc = "Angular speed around Y axis (raw)"]
23996    pub ygyro: i16,
23997    #[doc = "Angular speed around Z axis (raw)"]
23998    pub zgyro: i16,
23999    #[doc = "X Magnetic field (raw)"]
24000    pub xmag: i16,
24001    #[doc = "Y Magnetic field (raw)"]
24002    pub ymag: i16,
24003    #[doc = "Z Magnetic field (raw)"]
24004    pub zmag: i16,
24005    #[doc = "Id. Ids are numbered from 0 and map to IMUs numbered from 1 (e.g. IMU1 will have a message with id=0)"]
24006    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
24007    pub id: u8,
24008    #[doc = "Temperature, 0: IMU does not provide temperature values. If the IMU is at 0C it must send 1 (0.01C)."]
24009    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
24010    pub temperature: i16,
24011}
24012impl RAW_IMU_DATA {
24013    pub const ENCODED_LEN: usize = 29usize;
24014    pub const DEFAULT: Self = Self {
24015        time_usec: 0_u64,
24016        xacc: 0_i16,
24017        yacc: 0_i16,
24018        zacc: 0_i16,
24019        xgyro: 0_i16,
24020        ygyro: 0_i16,
24021        zgyro: 0_i16,
24022        xmag: 0_i16,
24023        ymag: 0_i16,
24024        zmag: 0_i16,
24025        id: 0_u8,
24026        temperature: 0_i16,
24027    };
24028    #[cfg(feature = "arbitrary")]
24029    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
24030        use arbitrary::{Arbitrary, Unstructured};
24031        let mut buf = [0u8; 1024];
24032        rng.fill_bytes(&mut buf);
24033        let mut unstructured = Unstructured::new(&buf);
24034        Self::arbitrary(&mut unstructured).unwrap_or_default()
24035    }
24036}
24037impl Default for RAW_IMU_DATA {
24038    fn default() -> Self {
24039        Self::DEFAULT.clone()
24040    }
24041}
24042impl MessageData for RAW_IMU_DATA {
24043    type Message = MavMessage;
24044    const ID: u32 = 27u32;
24045    const NAME: &'static str = "RAW_IMU";
24046    const EXTRA_CRC: u8 = 144u8;
24047    const ENCODED_LEN: usize = 29usize;
24048    fn deser(
24049        _version: MavlinkVersion,
24050        __input: &[u8],
24051    ) -> Result<Self, ::mavlink_core::error::ParserError> {
24052        let avail_len = __input.len();
24053        let mut payload_buf = [0; Self::ENCODED_LEN];
24054        let mut buf = if avail_len < Self::ENCODED_LEN {
24055            payload_buf[0..avail_len].copy_from_slice(__input);
24056            Bytes::new(&payload_buf)
24057        } else {
24058            Bytes::new(__input)
24059        };
24060        let mut __struct = Self::default();
24061        __struct.time_usec = buf.get_u64_le();
24062        __struct.xacc = buf.get_i16_le();
24063        __struct.yacc = buf.get_i16_le();
24064        __struct.zacc = buf.get_i16_le();
24065        __struct.xgyro = buf.get_i16_le();
24066        __struct.ygyro = buf.get_i16_le();
24067        __struct.zgyro = buf.get_i16_le();
24068        __struct.xmag = buf.get_i16_le();
24069        __struct.ymag = buf.get_i16_le();
24070        __struct.zmag = buf.get_i16_le();
24071        __struct.id = buf.get_u8();
24072        __struct.temperature = buf.get_i16_le();
24073        Ok(__struct)
24074    }
24075    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
24076        let mut __tmp = BytesMut::new(bytes);
24077        #[allow(clippy::absurd_extreme_comparisons)]
24078        #[allow(unused_comparisons)]
24079        if __tmp.remaining() < Self::ENCODED_LEN {
24080            panic!(
24081                "buffer is too small (need {} bytes, but got {})",
24082                Self::ENCODED_LEN,
24083                __tmp.remaining(),
24084            )
24085        }
24086        __tmp.put_u64_le(self.time_usec);
24087        __tmp.put_i16_le(self.xacc);
24088        __tmp.put_i16_le(self.yacc);
24089        __tmp.put_i16_le(self.zacc);
24090        __tmp.put_i16_le(self.xgyro);
24091        __tmp.put_i16_le(self.ygyro);
24092        __tmp.put_i16_le(self.zgyro);
24093        __tmp.put_i16_le(self.xmag);
24094        __tmp.put_i16_le(self.ymag);
24095        __tmp.put_i16_le(self.zmag);
24096        __tmp.put_u8(self.id);
24097        __tmp.put_i16_le(self.temperature);
24098        if matches!(version, MavlinkVersion::V2) {
24099            let len = __tmp.len();
24100            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
24101        } else {
24102            __tmp.len()
24103        }
24104    }
24105}
24106#[doc = "id: 28"]
24107#[doc = "The RAW pressure readings for the typical setup of one absolute pressure and one differential pressure sensor. The sensor values should be the raw, UNSCALED ADC values."]
24108#[derive(Debug, Clone, PartialEq)]
24109#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
24110#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24111pub struct RAW_PRESSURE_DATA {
24112    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
24113    pub time_usec: u64,
24114    #[doc = "Absolute pressure (raw)"]
24115    pub press_abs: i16,
24116    #[doc = "Differential pressure 1 (raw, 0 if nonexistent)"]
24117    pub press_diff1: i16,
24118    #[doc = "Differential pressure 2 (raw, 0 if nonexistent)"]
24119    pub press_diff2: i16,
24120    #[doc = "Raw Temperature measurement (raw)"]
24121    pub temperature: i16,
24122}
24123impl RAW_PRESSURE_DATA {
24124    pub const ENCODED_LEN: usize = 16usize;
24125    pub const DEFAULT: Self = Self {
24126        time_usec: 0_u64,
24127        press_abs: 0_i16,
24128        press_diff1: 0_i16,
24129        press_diff2: 0_i16,
24130        temperature: 0_i16,
24131    };
24132    #[cfg(feature = "arbitrary")]
24133    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
24134        use arbitrary::{Arbitrary, Unstructured};
24135        let mut buf = [0u8; 1024];
24136        rng.fill_bytes(&mut buf);
24137        let mut unstructured = Unstructured::new(&buf);
24138        Self::arbitrary(&mut unstructured).unwrap_or_default()
24139    }
24140}
24141impl Default for RAW_PRESSURE_DATA {
24142    fn default() -> Self {
24143        Self::DEFAULT.clone()
24144    }
24145}
24146impl MessageData for RAW_PRESSURE_DATA {
24147    type Message = MavMessage;
24148    const ID: u32 = 28u32;
24149    const NAME: &'static str = "RAW_PRESSURE";
24150    const EXTRA_CRC: u8 = 67u8;
24151    const ENCODED_LEN: usize = 16usize;
24152    fn deser(
24153        _version: MavlinkVersion,
24154        __input: &[u8],
24155    ) -> Result<Self, ::mavlink_core::error::ParserError> {
24156        let avail_len = __input.len();
24157        let mut payload_buf = [0; Self::ENCODED_LEN];
24158        let mut buf = if avail_len < Self::ENCODED_LEN {
24159            payload_buf[0..avail_len].copy_from_slice(__input);
24160            Bytes::new(&payload_buf)
24161        } else {
24162            Bytes::new(__input)
24163        };
24164        let mut __struct = Self::default();
24165        __struct.time_usec = buf.get_u64_le();
24166        __struct.press_abs = buf.get_i16_le();
24167        __struct.press_diff1 = buf.get_i16_le();
24168        __struct.press_diff2 = buf.get_i16_le();
24169        __struct.temperature = buf.get_i16_le();
24170        Ok(__struct)
24171    }
24172    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
24173        let mut __tmp = BytesMut::new(bytes);
24174        #[allow(clippy::absurd_extreme_comparisons)]
24175        #[allow(unused_comparisons)]
24176        if __tmp.remaining() < Self::ENCODED_LEN {
24177            panic!(
24178                "buffer is too small (need {} bytes, but got {})",
24179                Self::ENCODED_LEN,
24180                __tmp.remaining(),
24181            )
24182        }
24183        __tmp.put_u64_le(self.time_usec);
24184        __tmp.put_i16_le(self.press_abs);
24185        __tmp.put_i16_le(self.press_diff1);
24186        __tmp.put_i16_le(self.press_diff2);
24187        __tmp.put_i16_le(self.temperature);
24188        if matches!(version, MavlinkVersion::V2) {
24189            let len = __tmp.len();
24190            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
24191        } else {
24192            __tmp.len()
24193        }
24194    }
24195}
24196#[doc = "id: 339"]
24197#[doc = "RPM sensor data message."]
24198#[derive(Debug, Clone, PartialEq)]
24199#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
24200#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24201pub struct RAW_RPM_DATA {
24202    #[doc = "Indicated rate"]
24203    pub frequency: f32,
24204    #[doc = "Index of this RPM sensor (0-indexed)"]
24205    pub index: u8,
24206}
24207impl RAW_RPM_DATA {
24208    pub const ENCODED_LEN: usize = 5usize;
24209    pub const DEFAULT: Self = Self {
24210        frequency: 0.0_f32,
24211        index: 0_u8,
24212    };
24213    #[cfg(feature = "arbitrary")]
24214    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
24215        use arbitrary::{Arbitrary, Unstructured};
24216        let mut buf = [0u8; 1024];
24217        rng.fill_bytes(&mut buf);
24218        let mut unstructured = Unstructured::new(&buf);
24219        Self::arbitrary(&mut unstructured).unwrap_or_default()
24220    }
24221}
24222impl Default for RAW_RPM_DATA {
24223    fn default() -> Self {
24224        Self::DEFAULT.clone()
24225    }
24226}
24227impl MessageData for RAW_RPM_DATA {
24228    type Message = MavMessage;
24229    const ID: u32 = 339u32;
24230    const NAME: &'static str = "RAW_RPM";
24231    const EXTRA_CRC: u8 = 199u8;
24232    const ENCODED_LEN: usize = 5usize;
24233    fn deser(
24234        _version: MavlinkVersion,
24235        __input: &[u8],
24236    ) -> Result<Self, ::mavlink_core::error::ParserError> {
24237        let avail_len = __input.len();
24238        let mut payload_buf = [0; Self::ENCODED_LEN];
24239        let mut buf = if avail_len < Self::ENCODED_LEN {
24240            payload_buf[0..avail_len].copy_from_slice(__input);
24241            Bytes::new(&payload_buf)
24242        } else {
24243            Bytes::new(__input)
24244        };
24245        let mut __struct = Self::default();
24246        __struct.frequency = buf.get_f32_le();
24247        __struct.index = buf.get_u8();
24248        Ok(__struct)
24249    }
24250    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
24251        let mut __tmp = BytesMut::new(bytes);
24252        #[allow(clippy::absurd_extreme_comparisons)]
24253        #[allow(unused_comparisons)]
24254        if __tmp.remaining() < Self::ENCODED_LEN {
24255            panic!(
24256                "buffer is too small (need {} bytes, but got {})",
24257                Self::ENCODED_LEN,
24258                __tmp.remaining(),
24259            )
24260        }
24261        __tmp.put_f32_le(self.frequency);
24262        __tmp.put_u8(self.index);
24263        if matches!(version, MavlinkVersion::V2) {
24264            let len = __tmp.len();
24265            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
24266        } else {
24267            __tmp.len()
24268        }
24269    }
24270}
24271#[doc = "id: 65"]
24272#[doc = "The PPM values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%.  A value of UINT16_MAX implies the channel is unused. Individual receivers/transmitters might violate this specification."]
24273#[derive(Debug, Clone, PartialEq)]
24274#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
24275#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24276pub struct RC_CHANNELS_DATA {
24277    #[doc = "Timestamp (time since system boot)."]
24278    pub time_boot_ms: u32,
24279    #[doc = "RC channel 1 value."]
24280    pub chan1_raw: u16,
24281    #[doc = "RC channel 2 value."]
24282    pub chan2_raw: u16,
24283    #[doc = "RC channel 3 value."]
24284    pub chan3_raw: u16,
24285    #[doc = "RC channel 4 value."]
24286    pub chan4_raw: u16,
24287    #[doc = "RC channel 5 value."]
24288    pub chan5_raw: u16,
24289    #[doc = "RC channel 6 value."]
24290    pub chan6_raw: u16,
24291    #[doc = "RC channel 7 value."]
24292    pub chan7_raw: u16,
24293    #[doc = "RC channel 8 value."]
24294    pub chan8_raw: u16,
24295    #[doc = "RC channel 9 value."]
24296    pub chan9_raw: u16,
24297    #[doc = "RC channel 10 value."]
24298    pub chan10_raw: u16,
24299    #[doc = "RC channel 11 value."]
24300    pub chan11_raw: u16,
24301    #[doc = "RC channel 12 value."]
24302    pub chan12_raw: u16,
24303    #[doc = "RC channel 13 value."]
24304    pub chan13_raw: u16,
24305    #[doc = "RC channel 14 value."]
24306    pub chan14_raw: u16,
24307    #[doc = "RC channel 15 value."]
24308    pub chan15_raw: u16,
24309    #[doc = "RC channel 16 value."]
24310    pub chan16_raw: u16,
24311    #[doc = "RC channel 17 value."]
24312    pub chan17_raw: u16,
24313    #[doc = "RC channel 18 value."]
24314    pub chan18_raw: u16,
24315    #[doc = "Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available."]
24316    pub chancount: u8,
24317    #[doc = "Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown."]
24318    pub rssi: u8,
24319}
24320impl RC_CHANNELS_DATA {
24321    pub const ENCODED_LEN: usize = 42usize;
24322    pub const DEFAULT: Self = Self {
24323        time_boot_ms: 0_u32,
24324        chan1_raw: 0_u16,
24325        chan2_raw: 0_u16,
24326        chan3_raw: 0_u16,
24327        chan4_raw: 0_u16,
24328        chan5_raw: 0_u16,
24329        chan6_raw: 0_u16,
24330        chan7_raw: 0_u16,
24331        chan8_raw: 0_u16,
24332        chan9_raw: 0_u16,
24333        chan10_raw: 0_u16,
24334        chan11_raw: 0_u16,
24335        chan12_raw: 0_u16,
24336        chan13_raw: 0_u16,
24337        chan14_raw: 0_u16,
24338        chan15_raw: 0_u16,
24339        chan16_raw: 0_u16,
24340        chan17_raw: 0_u16,
24341        chan18_raw: 0_u16,
24342        chancount: 0_u8,
24343        rssi: 0_u8,
24344    };
24345    #[cfg(feature = "arbitrary")]
24346    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
24347        use arbitrary::{Arbitrary, Unstructured};
24348        let mut buf = [0u8; 1024];
24349        rng.fill_bytes(&mut buf);
24350        let mut unstructured = Unstructured::new(&buf);
24351        Self::arbitrary(&mut unstructured).unwrap_or_default()
24352    }
24353}
24354impl Default for RC_CHANNELS_DATA {
24355    fn default() -> Self {
24356        Self::DEFAULT.clone()
24357    }
24358}
24359impl MessageData for RC_CHANNELS_DATA {
24360    type Message = MavMessage;
24361    const ID: u32 = 65u32;
24362    const NAME: &'static str = "RC_CHANNELS";
24363    const EXTRA_CRC: u8 = 118u8;
24364    const ENCODED_LEN: usize = 42usize;
24365    fn deser(
24366        _version: MavlinkVersion,
24367        __input: &[u8],
24368    ) -> Result<Self, ::mavlink_core::error::ParserError> {
24369        let avail_len = __input.len();
24370        let mut payload_buf = [0; Self::ENCODED_LEN];
24371        let mut buf = if avail_len < Self::ENCODED_LEN {
24372            payload_buf[0..avail_len].copy_from_slice(__input);
24373            Bytes::new(&payload_buf)
24374        } else {
24375            Bytes::new(__input)
24376        };
24377        let mut __struct = Self::default();
24378        __struct.time_boot_ms = buf.get_u32_le();
24379        __struct.chan1_raw = buf.get_u16_le();
24380        __struct.chan2_raw = buf.get_u16_le();
24381        __struct.chan3_raw = buf.get_u16_le();
24382        __struct.chan4_raw = buf.get_u16_le();
24383        __struct.chan5_raw = buf.get_u16_le();
24384        __struct.chan6_raw = buf.get_u16_le();
24385        __struct.chan7_raw = buf.get_u16_le();
24386        __struct.chan8_raw = buf.get_u16_le();
24387        __struct.chan9_raw = buf.get_u16_le();
24388        __struct.chan10_raw = buf.get_u16_le();
24389        __struct.chan11_raw = buf.get_u16_le();
24390        __struct.chan12_raw = buf.get_u16_le();
24391        __struct.chan13_raw = buf.get_u16_le();
24392        __struct.chan14_raw = buf.get_u16_le();
24393        __struct.chan15_raw = buf.get_u16_le();
24394        __struct.chan16_raw = buf.get_u16_le();
24395        __struct.chan17_raw = buf.get_u16_le();
24396        __struct.chan18_raw = buf.get_u16_le();
24397        __struct.chancount = buf.get_u8();
24398        __struct.rssi = buf.get_u8();
24399        Ok(__struct)
24400    }
24401    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
24402        let mut __tmp = BytesMut::new(bytes);
24403        #[allow(clippy::absurd_extreme_comparisons)]
24404        #[allow(unused_comparisons)]
24405        if __tmp.remaining() < Self::ENCODED_LEN {
24406            panic!(
24407                "buffer is too small (need {} bytes, but got {})",
24408                Self::ENCODED_LEN,
24409                __tmp.remaining(),
24410            )
24411        }
24412        __tmp.put_u32_le(self.time_boot_ms);
24413        __tmp.put_u16_le(self.chan1_raw);
24414        __tmp.put_u16_le(self.chan2_raw);
24415        __tmp.put_u16_le(self.chan3_raw);
24416        __tmp.put_u16_le(self.chan4_raw);
24417        __tmp.put_u16_le(self.chan5_raw);
24418        __tmp.put_u16_le(self.chan6_raw);
24419        __tmp.put_u16_le(self.chan7_raw);
24420        __tmp.put_u16_le(self.chan8_raw);
24421        __tmp.put_u16_le(self.chan9_raw);
24422        __tmp.put_u16_le(self.chan10_raw);
24423        __tmp.put_u16_le(self.chan11_raw);
24424        __tmp.put_u16_le(self.chan12_raw);
24425        __tmp.put_u16_le(self.chan13_raw);
24426        __tmp.put_u16_le(self.chan14_raw);
24427        __tmp.put_u16_le(self.chan15_raw);
24428        __tmp.put_u16_le(self.chan16_raw);
24429        __tmp.put_u16_le(self.chan17_raw);
24430        __tmp.put_u16_le(self.chan18_raw);
24431        __tmp.put_u8(self.chancount);
24432        __tmp.put_u8(self.rssi);
24433        if matches!(version, MavlinkVersion::V2) {
24434            let len = __tmp.len();
24435            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
24436        } else {
24437            __tmp.len()
24438        }
24439    }
24440}
24441#[doc = "id: 70"]
24442#[doc = "The RAW values of the RC channels sent to the MAV to override info received from the RC radio. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification.  Note carefully the semantic differences between the first 8 channels and the subsequent channels."]
24443#[derive(Debug, Clone, PartialEq)]
24444#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
24445#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24446pub struct RC_CHANNELS_OVERRIDE_DATA {
24447    #[doc = "RC channel 1 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio."]
24448    pub chan1_raw: u16,
24449    #[doc = "RC channel 2 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio."]
24450    pub chan2_raw: u16,
24451    #[doc = "RC channel 3 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio."]
24452    pub chan3_raw: u16,
24453    #[doc = "RC channel 4 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio."]
24454    pub chan4_raw: u16,
24455    #[doc = "RC channel 5 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio."]
24456    pub chan5_raw: u16,
24457    #[doc = "RC channel 6 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio."]
24458    pub chan6_raw: u16,
24459    #[doc = "RC channel 7 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio."]
24460    pub chan7_raw: u16,
24461    #[doc = "RC channel 8 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio."]
24462    pub chan8_raw: u16,
24463    #[doc = "System ID"]
24464    pub target_system: u8,
24465    #[doc = "Component ID"]
24466    pub target_component: u8,
24467    #[doc = "RC channel 9 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio."]
24468    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
24469    pub chan9_raw: u16,
24470    #[doc = "RC channel 10 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio."]
24471    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
24472    pub chan10_raw: u16,
24473    #[doc = "RC channel 11 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio."]
24474    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
24475    pub chan11_raw: u16,
24476    #[doc = "RC channel 12 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio."]
24477    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
24478    pub chan12_raw: u16,
24479    #[doc = "RC channel 13 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio."]
24480    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
24481    pub chan13_raw: u16,
24482    #[doc = "RC channel 14 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio."]
24483    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
24484    pub chan14_raw: u16,
24485    #[doc = "RC channel 15 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio."]
24486    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
24487    pub chan15_raw: u16,
24488    #[doc = "RC channel 16 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio."]
24489    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
24490    pub chan16_raw: u16,
24491    #[doc = "RC channel 17 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio."]
24492    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
24493    pub chan17_raw: u16,
24494    #[doc = "RC channel 18 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio."]
24495    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
24496    pub chan18_raw: u16,
24497}
24498impl RC_CHANNELS_OVERRIDE_DATA {
24499    pub const ENCODED_LEN: usize = 38usize;
24500    pub const DEFAULT: Self = Self {
24501        chan1_raw: 0_u16,
24502        chan2_raw: 0_u16,
24503        chan3_raw: 0_u16,
24504        chan4_raw: 0_u16,
24505        chan5_raw: 0_u16,
24506        chan6_raw: 0_u16,
24507        chan7_raw: 0_u16,
24508        chan8_raw: 0_u16,
24509        target_system: 0_u8,
24510        target_component: 0_u8,
24511        chan9_raw: 0_u16,
24512        chan10_raw: 0_u16,
24513        chan11_raw: 0_u16,
24514        chan12_raw: 0_u16,
24515        chan13_raw: 0_u16,
24516        chan14_raw: 0_u16,
24517        chan15_raw: 0_u16,
24518        chan16_raw: 0_u16,
24519        chan17_raw: 0_u16,
24520        chan18_raw: 0_u16,
24521    };
24522    #[cfg(feature = "arbitrary")]
24523    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
24524        use arbitrary::{Arbitrary, Unstructured};
24525        let mut buf = [0u8; 1024];
24526        rng.fill_bytes(&mut buf);
24527        let mut unstructured = Unstructured::new(&buf);
24528        Self::arbitrary(&mut unstructured).unwrap_or_default()
24529    }
24530}
24531impl Default for RC_CHANNELS_OVERRIDE_DATA {
24532    fn default() -> Self {
24533        Self::DEFAULT.clone()
24534    }
24535}
24536impl MessageData for RC_CHANNELS_OVERRIDE_DATA {
24537    type Message = MavMessage;
24538    const ID: u32 = 70u32;
24539    const NAME: &'static str = "RC_CHANNELS_OVERRIDE";
24540    const EXTRA_CRC: u8 = 124u8;
24541    const ENCODED_LEN: usize = 38usize;
24542    fn deser(
24543        _version: MavlinkVersion,
24544        __input: &[u8],
24545    ) -> Result<Self, ::mavlink_core::error::ParserError> {
24546        let avail_len = __input.len();
24547        let mut payload_buf = [0; Self::ENCODED_LEN];
24548        let mut buf = if avail_len < Self::ENCODED_LEN {
24549            payload_buf[0..avail_len].copy_from_slice(__input);
24550            Bytes::new(&payload_buf)
24551        } else {
24552            Bytes::new(__input)
24553        };
24554        let mut __struct = Self::default();
24555        __struct.chan1_raw = buf.get_u16_le();
24556        __struct.chan2_raw = buf.get_u16_le();
24557        __struct.chan3_raw = buf.get_u16_le();
24558        __struct.chan4_raw = buf.get_u16_le();
24559        __struct.chan5_raw = buf.get_u16_le();
24560        __struct.chan6_raw = buf.get_u16_le();
24561        __struct.chan7_raw = buf.get_u16_le();
24562        __struct.chan8_raw = buf.get_u16_le();
24563        __struct.target_system = buf.get_u8();
24564        __struct.target_component = buf.get_u8();
24565        __struct.chan9_raw = buf.get_u16_le();
24566        __struct.chan10_raw = buf.get_u16_le();
24567        __struct.chan11_raw = buf.get_u16_le();
24568        __struct.chan12_raw = buf.get_u16_le();
24569        __struct.chan13_raw = buf.get_u16_le();
24570        __struct.chan14_raw = buf.get_u16_le();
24571        __struct.chan15_raw = buf.get_u16_le();
24572        __struct.chan16_raw = buf.get_u16_le();
24573        __struct.chan17_raw = buf.get_u16_le();
24574        __struct.chan18_raw = buf.get_u16_le();
24575        Ok(__struct)
24576    }
24577    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
24578        let mut __tmp = BytesMut::new(bytes);
24579        #[allow(clippy::absurd_extreme_comparisons)]
24580        #[allow(unused_comparisons)]
24581        if __tmp.remaining() < Self::ENCODED_LEN {
24582            panic!(
24583                "buffer is too small (need {} bytes, but got {})",
24584                Self::ENCODED_LEN,
24585                __tmp.remaining(),
24586            )
24587        }
24588        __tmp.put_u16_le(self.chan1_raw);
24589        __tmp.put_u16_le(self.chan2_raw);
24590        __tmp.put_u16_le(self.chan3_raw);
24591        __tmp.put_u16_le(self.chan4_raw);
24592        __tmp.put_u16_le(self.chan5_raw);
24593        __tmp.put_u16_le(self.chan6_raw);
24594        __tmp.put_u16_le(self.chan7_raw);
24595        __tmp.put_u16_le(self.chan8_raw);
24596        __tmp.put_u8(self.target_system);
24597        __tmp.put_u8(self.target_component);
24598        __tmp.put_u16_le(self.chan9_raw);
24599        __tmp.put_u16_le(self.chan10_raw);
24600        __tmp.put_u16_le(self.chan11_raw);
24601        __tmp.put_u16_le(self.chan12_raw);
24602        __tmp.put_u16_le(self.chan13_raw);
24603        __tmp.put_u16_le(self.chan14_raw);
24604        __tmp.put_u16_le(self.chan15_raw);
24605        __tmp.put_u16_le(self.chan16_raw);
24606        __tmp.put_u16_le(self.chan17_raw);
24607        __tmp.put_u16_le(self.chan18_raw);
24608        if matches!(version, MavlinkVersion::V2) {
24609            let len = __tmp.len();
24610            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
24611        } else {
24612            __tmp.len()
24613        }
24614    }
24615}
24616#[doc = "id: 35"]
24617#[doc = "The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. A value of UINT16_MAX implies the channel is unused. Individual receivers/transmitters might violate this specification."]
24618#[derive(Debug, Clone, PartialEq)]
24619#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
24620#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24621pub struct RC_CHANNELS_RAW_DATA {
24622    #[doc = "Timestamp (time since system boot)."]
24623    pub time_boot_ms: u32,
24624    #[doc = "RC channel 1 value."]
24625    pub chan1_raw: u16,
24626    #[doc = "RC channel 2 value."]
24627    pub chan2_raw: u16,
24628    #[doc = "RC channel 3 value."]
24629    pub chan3_raw: u16,
24630    #[doc = "RC channel 4 value."]
24631    pub chan4_raw: u16,
24632    #[doc = "RC channel 5 value."]
24633    pub chan5_raw: u16,
24634    #[doc = "RC channel 6 value."]
24635    pub chan6_raw: u16,
24636    #[doc = "RC channel 7 value."]
24637    pub chan7_raw: u16,
24638    #[doc = "RC channel 8 value."]
24639    pub chan8_raw: u16,
24640    #[doc = "Servo output port (set of 8 outputs = 1 port). Flight stacks running on Pixhawk should use: 0 = MAIN, 1 = AUX."]
24641    pub port: u8,
24642    #[doc = "Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown."]
24643    pub rssi: u8,
24644}
24645impl RC_CHANNELS_RAW_DATA {
24646    pub const ENCODED_LEN: usize = 22usize;
24647    pub const DEFAULT: Self = Self {
24648        time_boot_ms: 0_u32,
24649        chan1_raw: 0_u16,
24650        chan2_raw: 0_u16,
24651        chan3_raw: 0_u16,
24652        chan4_raw: 0_u16,
24653        chan5_raw: 0_u16,
24654        chan6_raw: 0_u16,
24655        chan7_raw: 0_u16,
24656        chan8_raw: 0_u16,
24657        port: 0_u8,
24658        rssi: 0_u8,
24659    };
24660    #[cfg(feature = "arbitrary")]
24661    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
24662        use arbitrary::{Arbitrary, Unstructured};
24663        let mut buf = [0u8; 1024];
24664        rng.fill_bytes(&mut buf);
24665        let mut unstructured = Unstructured::new(&buf);
24666        Self::arbitrary(&mut unstructured).unwrap_or_default()
24667    }
24668}
24669impl Default for RC_CHANNELS_RAW_DATA {
24670    fn default() -> Self {
24671        Self::DEFAULT.clone()
24672    }
24673}
24674impl MessageData for RC_CHANNELS_RAW_DATA {
24675    type Message = MavMessage;
24676    const ID: u32 = 35u32;
24677    const NAME: &'static str = "RC_CHANNELS_RAW";
24678    const EXTRA_CRC: u8 = 244u8;
24679    const ENCODED_LEN: usize = 22usize;
24680    fn deser(
24681        _version: MavlinkVersion,
24682        __input: &[u8],
24683    ) -> Result<Self, ::mavlink_core::error::ParserError> {
24684        let avail_len = __input.len();
24685        let mut payload_buf = [0; Self::ENCODED_LEN];
24686        let mut buf = if avail_len < Self::ENCODED_LEN {
24687            payload_buf[0..avail_len].copy_from_slice(__input);
24688            Bytes::new(&payload_buf)
24689        } else {
24690            Bytes::new(__input)
24691        };
24692        let mut __struct = Self::default();
24693        __struct.time_boot_ms = buf.get_u32_le();
24694        __struct.chan1_raw = buf.get_u16_le();
24695        __struct.chan2_raw = buf.get_u16_le();
24696        __struct.chan3_raw = buf.get_u16_le();
24697        __struct.chan4_raw = buf.get_u16_le();
24698        __struct.chan5_raw = buf.get_u16_le();
24699        __struct.chan6_raw = buf.get_u16_le();
24700        __struct.chan7_raw = buf.get_u16_le();
24701        __struct.chan8_raw = buf.get_u16_le();
24702        __struct.port = buf.get_u8();
24703        __struct.rssi = buf.get_u8();
24704        Ok(__struct)
24705    }
24706    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
24707        let mut __tmp = BytesMut::new(bytes);
24708        #[allow(clippy::absurd_extreme_comparisons)]
24709        #[allow(unused_comparisons)]
24710        if __tmp.remaining() < Self::ENCODED_LEN {
24711            panic!(
24712                "buffer is too small (need {} bytes, but got {})",
24713                Self::ENCODED_LEN,
24714                __tmp.remaining(),
24715            )
24716        }
24717        __tmp.put_u32_le(self.time_boot_ms);
24718        __tmp.put_u16_le(self.chan1_raw);
24719        __tmp.put_u16_le(self.chan2_raw);
24720        __tmp.put_u16_le(self.chan3_raw);
24721        __tmp.put_u16_le(self.chan4_raw);
24722        __tmp.put_u16_le(self.chan5_raw);
24723        __tmp.put_u16_le(self.chan6_raw);
24724        __tmp.put_u16_le(self.chan7_raw);
24725        __tmp.put_u16_le(self.chan8_raw);
24726        __tmp.put_u8(self.port);
24727        __tmp.put_u8(self.rssi);
24728        if matches!(version, MavlinkVersion::V2) {
24729            let len = __tmp.len();
24730            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
24731        } else {
24732            __tmp.len()
24733        }
24734    }
24735}
24736#[doc = "id: 34"]
24737#[doc = "The scaled values of the RC channels received: (-100%) -10000, (0%) 0, (100%) 10000. Channels that are inactive should be set to INT16_MAX."]
24738#[derive(Debug, Clone, PartialEq)]
24739#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
24740#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24741pub struct RC_CHANNELS_SCALED_DATA {
24742    #[doc = "Timestamp (time since system boot)."]
24743    pub time_boot_ms: u32,
24744    #[doc = "RC channel 1 value scaled."]
24745    pub chan1_scaled: i16,
24746    #[doc = "RC channel 2 value scaled."]
24747    pub chan2_scaled: i16,
24748    #[doc = "RC channel 3 value scaled."]
24749    pub chan3_scaled: i16,
24750    #[doc = "RC channel 4 value scaled."]
24751    pub chan4_scaled: i16,
24752    #[doc = "RC channel 5 value scaled."]
24753    pub chan5_scaled: i16,
24754    #[doc = "RC channel 6 value scaled."]
24755    pub chan6_scaled: i16,
24756    #[doc = "RC channel 7 value scaled."]
24757    pub chan7_scaled: i16,
24758    #[doc = "RC channel 8 value scaled."]
24759    pub chan8_scaled: i16,
24760    #[doc = "Servo output port (set of 8 outputs = 1 port). Flight stacks running on Pixhawk should use: 0 = MAIN, 1 = AUX."]
24761    pub port: u8,
24762    #[doc = "Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown."]
24763    pub rssi: u8,
24764}
24765impl RC_CHANNELS_SCALED_DATA {
24766    pub const ENCODED_LEN: usize = 22usize;
24767    pub const DEFAULT: Self = Self {
24768        time_boot_ms: 0_u32,
24769        chan1_scaled: 0_i16,
24770        chan2_scaled: 0_i16,
24771        chan3_scaled: 0_i16,
24772        chan4_scaled: 0_i16,
24773        chan5_scaled: 0_i16,
24774        chan6_scaled: 0_i16,
24775        chan7_scaled: 0_i16,
24776        chan8_scaled: 0_i16,
24777        port: 0_u8,
24778        rssi: 0_u8,
24779    };
24780    #[cfg(feature = "arbitrary")]
24781    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
24782        use arbitrary::{Arbitrary, Unstructured};
24783        let mut buf = [0u8; 1024];
24784        rng.fill_bytes(&mut buf);
24785        let mut unstructured = Unstructured::new(&buf);
24786        Self::arbitrary(&mut unstructured).unwrap_or_default()
24787    }
24788}
24789impl Default for RC_CHANNELS_SCALED_DATA {
24790    fn default() -> Self {
24791        Self::DEFAULT.clone()
24792    }
24793}
24794impl MessageData for RC_CHANNELS_SCALED_DATA {
24795    type Message = MavMessage;
24796    const ID: u32 = 34u32;
24797    const NAME: &'static str = "RC_CHANNELS_SCALED";
24798    const EXTRA_CRC: u8 = 237u8;
24799    const ENCODED_LEN: usize = 22usize;
24800    fn deser(
24801        _version: MavlinkVersion,
24802        __input: &[u8],
24803    ) -> Result<Self, ::mavlink_core::error::ParserError> {
24804        let avail_len = __input.len();
24805        let mut payload_buf = [0; Self::ENCODED_LEN];
24806        let mut buf = if avail_len < Self::ENCODED_LEN {
24807            payload_buf[0..avail_len].copy_from_slice(__input);
24808            Bytes::new(&payload_buf)
24809        } else {
24810            Bytes::new(__input)
24811        };
24812        let mut __struct = Self::default();
24813        __struct.time_boot_ms = buf.get_u32_le();
24814        __struct.chan1_scaled = buf.get_i16_le();
24815        __struct.chan2_scaled = buf.get_i16_le();
24816        __struct.chan3_scaled = buf.get_i16_le();
24817        __struct.chan4_scaled = buf.get_i16_le();
24818        __struct.chan5_scaled = buf.get_i16_le();
24819        __struct.chan6_scaled = buf.get_i16_le();
24820        __struct.chan7_scaled = buf.get_i16_le();
24821        __struct.chan8_scaled = buf.get_i16_le();
24822        __struct.port = buf.get_u8();
24823        __struct.rssi = buf.get_u8();
24824        Ok(__struct)
24825    }
24826    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
24827        let mut __tmp = BytesMut::new(bytes);
24828        #[allow(clippy::absurd_extreme_comparisons)]
24829        #[allow(unused_comparisons)]
24830        if __tmp.remaining() < Self::ENCODED_LEN {
24831            panic!(
24832                "buffer is too small (need {} bytes, but got {})",
24833                Self::ENCODED_LEN,
24834                __tmp.remaining(),
24835            )
24836        }
24837        __tmp.put_u32_le(self.time_boot_ms);
24838        __tmp.put_i16_le(self.chan1_scaled);
24839        __tmp.put_i16_le(self.chan2_scaled);
24840        __tmp.put_i16_le(self.chan3_scaled);
24841        __tmp.put_i16_le(self.chan4_scaled);
24842        __tmp.put_i16_le(self.chan5_scaled);
24843        __tmp.put_i16_le(self.chan6_scaled);
24844        __tmp.put_i16_le(self.chan7_scaled);
24845        __tmp.put_i16_le(self.chan8_scaled);
24846        __tmp.put_u8(self.port);
24847        __tmp.put_u8(self.rssi);
24848        if matches!(version, MavlinkVersion::V2) {
24849            let len = __tmp.len();
24850            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
24851        } else {
24852            __tmp.len()
24853        }
24854    }
24855}
24856#[deprecated = " See `MAV_CMD_SET_MESSAGE_INTERVAL ` (Deprecated since 2015-08)"]
24857#[doc = "id: 66"]
24858#[doc = "Request a data stream."]
24859#[derive(Debug, Clone, PartialEq)]
24860#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
24861#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24862pub struct REQUEST_DATA_STREAM_DATA {
24863    #[doc = "The requested message rate"]
24864    pub req_message_rate: u16,
24865    #[doc = "The target requested to send the message stream."]
24866    pub target_system: u8,
24867    #[doc = "The target requested to send the message stream."]
24868    pub target_component: u8,
24869    #[doc = "The ID of the requested data stream"]
24870    pub req_stream_id: u8,
24871    #[doc = "1 to start sending, 0 to stop sending."]
24872    pub start_stop: u8,
24873}
24874impl REQUEST_DATA_STREAM_DATA {
24875    pub const ENCODED_LEN: usize = 6usize;
24876    pub const DEFAULT: Self = Self {
24877        req_message_rate: 0_u16,
24878        target_system: 0_u8,
24879        target_component: 0_u8,
24880        req_stream_id: 0_u8,
24881        start_stop: 0_u8,
24882    };
24883    #[cfg(feature = "arbitrary")]
24884    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
24885        use arbitrary::{Arbitrary, Unstructured};
24886        let mut buf = [0u8; 1024];
24887        rng.fill_bytes(&mut buf);
24888        let mut unstructured = Unstructured::new(&buf);
24889        Self::arbitrary(&mut unstructured).unwrap_or_default()
24890    }
24891}
24892impl Default for REQUEST_DATA_STREAM_DATA {
24893    fn default() -> Self {
24894        Self::DEFAULT.clone()
24895    }
24896}
24897impl MessageData for REQUEST_DATA_STREAM_DATA {
24898    type Message = MavMessage;
24899    const ID: u32 = 66u32;
24900    const NAME: &'static str = "REQUEST_DATA_STREAM";
24901    const EXTRA_CRC: u8 = 148u8;
24902    const ENCODED_LEN: usize = 6usize;
24903    fn deser(
24904        _version: MavlinkVersion,
24905        __input: &[u8],
24906    ) -> Result<Self, ::mavlink_core::error::ParserError> {
24907        let avail_len = __input.len();
24908        let mut payload_buf = [0; Self::ENCODED_LEN];
24909        let mut buf = if avail_len < Self::ENCODED_LEN {
24910            payload_buf[0..avail_len].copy_from_slice(__input);
24911            Bytes::new(&payload_buf)
24912        } else {
24913            Bytes::new(__input)
24914        };
24915        let mut __struct = Self::default();
24916        __struct.req_message_rate = buf.get_u16_le();
24917        __struct.target_system = buf.get_u8();
24918        __struct.target_component = buf.get_u8();
24919        __struct.req_stream_id = buf.get_u8();
24920        __struct.start_stop = buf.get_u8();
24921        Ok(__struct)
24922    }
24923    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
24924        let mut __tmp = BytesMut::new(bytes);
24925        #[allow(clippy::absurd_extreme_comparisons)]
24926        #[allow(unused_comparisons)]
24927        if __tmp.remaining() < Self::ENCODED_LEN {
24928            panic!(
24929                "buffer is too small (need {} bytes, but got {})",
24930                Self::ENCODED_LEN,
24931                __tmp.remaining(),
24932            )
24933        }
24934        __tmp.put_u16_le(self.req_message_rate);
24935        __tmp.put_u8(self.target_system);
24936        __tmp.put_u8(self.target_component);
24937        __tmp.put_u8(self.req_stream_id);
24938        __tmp.put_u8(self.start_stop);
24939        if matches!(version, MavlinkVersion::V2) {
24940            let len = __tmp.len();
24941            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
24942        } else {
24943            __tmp.len()
24944        }
24945    }
24946}
24947#[doc = "id: 412"]
24948#[doc = "Request one or more events to be (re-)sent. If first_sequence==last_sequence, only a single event is requested. Note that first_sequence can be larger than last_sequence (because the sequence number can wrap). Each sequence will trigger an EVENT or EVENT_ERROR response."]
24949#[derive(Debug, Clone, PartialEq)]
24950#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
24951#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24952pub struct REQUEST_EVENT_DATA {
24953    #[doc = "First sequence number of the requested event."]
24954    pub first_sequence: u16,
24955    #[doc = "Last sequence number of the requested event."]
24956    pub last_sequence: u16,
24957    #[doc = "System ID"]
24958    pub target_system: u8,
24959    #[doc = "Component ID"]
24960    pub target_component: u8,
24961}
24962impl REQUEST_EVENT_DATA {
24963    pub const ENCODED_LEN: usize = 6usize;
24964    pub const DEFAULT: Self = Self {
24965        first_sequence: 0_u16,
24966        last_sequence: 0_u16,
24967        target_system: 0_u8,
24968        target_component: 0_u8,
24969    };
24970    #[cfg(feature = "arbitrary")]
24971    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
24972        use arbitrary::{Arbitrary, Unstructured};
24973        let mut buf = [0u8; 1024];
24974        rng.fill_bytes(&mut buf);
24975        let mut unstructured = Unstructured::new(&buf);
24976        Self::arbitrary(&mut unstructured).unwrap_or_default()
24977    }
24978}
24979impl Default for REQUEST_EVENT_DATA {
24980    fn default() -> Self {
24981        Self::DEFAULT.clone()
24982    }
24983}
24984impl MessageData for REQUEST_EVENT_DATA {
24985    type Message = MavMessage;
24986    const ID: u32 = 412u32;
24987    const NAME: &'static str = "REQUEST_EVENT";
24988    const EXTRA_CRC: u8 = 33u8;
24989    const ENCODED_LEN: usize = 6usize;
24990    fn deser(
24991        _version: MavlinkVersion,
24992        __input: &[u8],
24993    ) -> Result<Self, ::mavlink_core::error::ParserError> {
24994        let avail_len = __input.len();
24995        let mut payload_buf = [0; Self::ENCODED_LEN];
24996        let mut buf = if avail_len < Self::ENCODED_LEN {
24997            payload_buf[0..avail_len].copy_from_slice(__input);
24998            Bytes::new(&payload_buf)
24999        } else {
25000            Bytes::new(__input)
25001        };
25002        let mut __struct = Self::default();
25003        __struct.first_sequence = buf.get_u16_le();
25004        __struct.last_sequence = buf.get_u16_le();
25005        __struct.target_system = buf.get_u8();
25006        __struct.target_component = buf.get_u8();
25007        Ok(__struct)
25008    }
25009    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
25010        let mut __tmp = BytesMut::new(bytes);
25011        #[allow(clippy::absurd_extreme_comparisons)]
25012        #[allow(unused_comparisons)]
25013        if __tmp.remaining() < Self::ENCODED_LEN {
25014            panic!(
25015                "buffer is too small (need {} bytes, but got {})",
25016                Self::ENCODED_LEN,
25017                __tmp.remaining(),
25018            )
25019        }
25020        __tmp.put_u16_le(self.first_sequence);
25021        __tmp.put_u16_le(self.last_sequence);
25022        __tmp.put_u8(self.target_system);
25023        __tmp.put_u8(self.target_component);
25024        if matches!(version, MavlinkVersion::V2) {
25025            let len = __tmp.len();
25026            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
25027        } else {
25028            __tmp.len()
25029        }
25030    }
25031}
25032#[doc = "id: 142"]
25033#[doc = "The autopilot is requesting a resource (file, binary, other type of data)."]
25034#[derive(Debug, Clone, PartialEq)]
25035#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25036#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25037pub struct RESOURCE_REQUEST_DATA {
25038    #[doc = "Request ID. This ID should be re-used when sending back URI contents"]
25039    pub request_id: u8,
25040    #[doc = "The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary"]
25041    pub uri_type: u8,
25042    #[doc = "The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum)"]
25043    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
25044    pub uri: [u8; 120],
25045    #[doc = "The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream."]
25046    pub transfer_type: u8,
25047    #[doc = "The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP)."]
25048    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
25049    pub storage: [u8; 120],
25050}
25051impl RESOURCE_REQUEST_DATA {
25052    pub const ENCODED_LEN: usize = 243usize;
25053    pub const DEFAULT: Self = Self {
25054        request_id: 0_u8,
25055        uri_type: 0_u8,
25056        uri: [0_u8; 120usize],
25057        transfer_type: 0_u8,
25058        storage: [0_u8; 120usize],
25059    };
25060    #[cfg(feature = "arbitrary")]
25061    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
25062        use arbitrary::{Arbitrary, Unstructured};
25063        let mut buf = [0u8; 1024];
25064        rng.fill_bytes(&mut buf);
25065        let mut unstructured = Unstructured::new(&buf);
25066        Self::arbitrary(&mut unstructured).unwrap_or_default()
25067    }
25068}
25069impl Default for RESOURCE_REQUEST_DATA {
25070    fn default() -> Self {
25071        Self::DEFAULT.clone()
25072    }
25073}
25074impl MessageData for RESOURCE_REQUEST_DATA {
25075    type Message = MavMessage;
25076    const ID: u32 = 142u32;
25077    const NAME: &'static str = "RESOURCE_REQUEST";
25078    const EXTRA_CRC: u8 = 72u8;
25079    const ENCODED_LEN: usize = 243usize;
25080    fn deser(
25081        _version: MavlinkVersion,
25082        __input: &[u8],
25083    ) -> Result<Self, ::mavlink_core::error::ParserError> {
25084        let avail_len = __input.len();
25085        let mut payload_buf = [0; Self::ENCODED_LEN];
25086        let mut buf = if avail_len < Self::ENCODED_LEN {
25087            payload_buf[0..avail_len].copy_from_slice(__input);
25088            Bytes::new(&payload_buf)
25089        } else {
25090            Bytes::new(__input)
25091        };
25092        let mut __struct = Self::default();
25093        __struct.request_id = buf.get_u8();
25094        __struct.uri_type = buf.get_u8();
25095        for v in &mut __struct.uri {
25096            let val = buf.get_u8();
25097            *v = val;
25098        }
25099        __struct.transfer_type = buf.get_u8();
25100        for v in &mut __struct.storage {
25101            let val = buf.get_u8();
25102            *v = val;
25103        }
25104        Ok(__struct)
25105    }
25106    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
25107        let mut __tmp = BytesMut::new(bytes);
25108        #[allow(clippy::absurd_extreme_comparisons)]
25109        #[allow(unused_comparisons)]
25110        if __tmp.remaining() < Self::ENCODED_LEN {
25111            panic!(
25112                "buffer is too small (need {} bytes, but got {})",
25113                Self::ENCODED_LEN,
25114                __tmp.remaining(),
25115            )
25116        }
25117        __tmp.put_u8(self.request_id);
25118        __tmp.put_u8(self.uri_type);
25119        for val in &self.uri {
25120            __tmp.put_u8(*val);
25121        }
25122        __tmp.put_u8(self.transfer_type);
25123        for val in &self.storage {
25124            __tmp.put_u8(*val);
25125        }
25126        if matches!(version, MavlinkVersion::V2) {
25127            let len = __tmp.len();
25128            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
25129        } else {
25130            __tmp.len()
25131        }
25132    }
25133}
25134#[doc = "id: 413"]
25135#[doc = "Response to a REQUEST_EVENT in case of an error (e.g. the event is not available anymore)."]
25136#[derive(Debug, Clone, PartialEq)]
25137#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25138#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25139pub struct RESPONSE_EVENT_ERROR_DATA {
25140    #[doc = "Sequence number."]
25141    pub sequence: u16,
25142    #[doc = "Oldest Sequence number that is still available after the sequence set in REQUEST_EVENT."]
25143    pub sequence_oldest_available: u16,
25144    #[doc = "System ID"]
25145    pub target_system: u8,
25146    #[doc = "Component ID"]
25147    pub target_component: u8,
25148    #[doc = "Error reason."]
25149    pub reason: MavEventErrorReason,
25150}
25151impl RESPONSE_EVENT_ERROR_DATA {
25152    pub const ENCODED_LEN: usize = 7usize;
25153    pub const DEFAULT: Self = Self {
25154        sequence: 0_u16,
25155        sequence_oldest_available: 0_u16,
25156        target_system: 0_u8,
25157        target_component: 0_u8,
25158        reason: MavEventErrorReason::DEFAULT,
25159    };
25160    #[cfg(feature = "arbitrary")]
25161    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
25162        use arbitrary::{Arbitrary, Unstructured};
25163        let mut buf = [0u8; 1024];
25164        rng.fill_bytes(&mut buf);
25165        let mut unstructured = Unstructured::new(&buf);
25166        Self::arbitrary(&mut unstructured).unwrap_or_default()
25167    }
25168}
25169impl Default for RESPONSE_EVENT_ERROR_DATA {
25170    fn default() -> Self {
25171        Self::DEFAULT.clone()
25172    }
25173}
25174impl MessageData for RESPONSE_EVENT_ERROR_DATA {
25175    type Message = MavMessage;
25176    const ID: u32 = 413u32;
25177    const NAME: &'static str = "RESPONSE_EVENT_ERROR";
25178    const EXTRA_CRC: u8 = 77u8;
25179    const ENCODED_LEN: usize = 7usize;
25180    fn deser(
25181        _version: MavlinkVersion,
25182        __input: &[u8],
25183    ) -> Result<Self, ::mavlink_core::error::ParserError> {
25184        let avail_len = __input.len();
25185        let mut payload_buf = [0; Self::ENCODED_LEN];
25186        let mut buf = if avail_len < Self::ENCODED_LEN {
25187            payload_buf[0..avail_len].copy_from_slice(__input);
25188            Bytes::new(&payload_buf)
25189        } else {
25190            Bytes::new(__input)
25191        };
25192        let mut __struct = Self::default();
25193        __struct.sequence = buf.get_u16_le();
25194        __struct.sequence_oldest_available = buf.get_u16_le();
25195        __struct.target_system = buf.get_u8();
25196        __struct.target_component = buf.get_u8();
25197        let tmp = buf.get_u8();
25198        __struct.reason =
25199            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
25200                enum_type: "MavEventErrorReason",
25201                value: tmp as u32,
25202            })?;
25203        Ok(__struct)
25204    }
25205    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
25206        let mut __tmp = BytesMut::new(bytes);
25207        #[allow(clippy::absurd_extreme_comparisons)]
25208        #[allow(unused_comparisons)]
25209        if __tmp.remaining() < Self::ENCODED_LEN {
25210            panic!(
25211                "buffer is too small (need {} bytes, but got {})",
25212                Self::ENCODED_LEN,
25213                __tmp.remaining(),
25214            )
25215        }
25216        __tmp.put_u16_le(self.sequence);
25217        __tmp.put_u16_le(self.sequence_oldest_available);
25218        __tmp.put_u8(self.target_system);
25219        __tmp.put_u8(self.target_component);
25220        __tmp.put_u8(self.reason as u8);
25221        if matches!(version, MavlinkVersion::V2) {
25222            let len = __tmp.len();
25223            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
25224        } else {
25225            __tmp.len()
25226        }
25227    }
25228}
25229#[doc = "id: 55"]
25230#[doc = "Read out the safety zone the MAV currently assumes."]
25231#[derive(Debug, Clone, PartialEq)]
25232#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25233#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25234pub struct SAFETY_ALLOWED_AREA_DATA {
25235    #[doc = "x position 1 / Latitude 1"]
25236    pub p1x: f32,
25237    #[doc = "y position 1 / Longitude 1"]
25238    pub p1y: f32,
25239    #[doc = "z position 1 / Altitude 1"]
25240    pub p1z: f32,
25241    #[doc = "x position 2 / Latitude 2"]
25242    pub p2x: f32,
25243    #[doc = "y position 2 / Longitude 2"]
25244    pub p2y: f32,
25245    #[doc = "z position 2 / Altitude 2"]
25246    pub p2z: f32,
25247    #[doc = "Coordinate frame. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down."]
25248    pub frame: MavFrame,
25249}
25250impl SAFETY_ALLOWED_AREA_DATA {
25251    pub const ENCODED_LEN: usize = 25usize;
25252    pub const DEFAULT: Self = Self {
25253        p1x: 0.0_f32,
25254        p1y: 0.0_f32,
25255        p1z: 0.0_f32,
25256        p2x: 0.0_f32,
25257        p2y: 0.0_f32,
25258        p2z: 0.0_f32,
25259        frame: MavFrame::DEFAULT,
25260    };
25261    #[cfg(feature = "arbitrary")]
25262    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
25263        use arbitrary::{Arbitrary, Unstructured};
25264        let mut buf = [0u8; 1024];
25265        rng.fill_bytes(&mut buf);
25266        let mut unstructured = Unstructured::new(&buf);
25267        Self::arbitrary(&mut unstructured).unwrap_or_default()
25268    }
25269}
25270impl Default for SAFETY_ALLOWED_AREA_DATA {
25271    fn default() -> Self {
25272        Self::DEFAULT.clone()
25273    }
25274}
25275impl MessageData for SAFETY_ALLOWED_AREA_DATA {
25276    type Message = MavMessage;
25277    const ID: u32 = 55u32;
25278    const NAME: &'static str = "SAFETY_ALLOWED_AREA";
25279    const EXTRA_CRC: u8 = 3u8;
25280    const ENCODED_LEN: usize = 25usize;
25281    fn deser(
25282        _version: MavlinkVersion,
25283        __input: &[u8],
25284    ) -> Result<Self, ::mavlink_core::error::ParserError> {
25285        let avail_len = __input.len();
25286        let mut payload_buf = [0; Self::ENCODED_LEN];
25287        let mut buf = if avail_len < Self::ENCODED_LEN {
25288            payload_buf[0..avail_len].copy_from_slice(__input);
25289            Bytes::new(&payload_buf)
25290        } else {
25291            Bytes::new(__input)
25292        };
25293        let mut __struct = Self::default();
25294        __struct.p1x = buf.get_f32_le();
25295        __struct.p1y = buf.get_f32_le();
25296        __struct.p1z = buf.get_f32_le();
25297        __struct.p2x = buf.get_f32_le();
25298        __struct.p2y = buf.get_f32_le();
25299        __struct.p2z = buf.get_f32_le();
25300        let tmp = buf.get_u8();
25301        __struct.frame =
25302            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
25303                enum_type: "MavFrame",
25304                value: tmp as u32,
25305            })?;
25306        Ok(__struct)
25307    }
25308    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
25309        let mut __tmp = BytesMut::new(bytes);
25310        #[allow(clippy::absurd_extreme_comparisons)]
25311        #[allow(unused_comparisons)]
25312        if __tmp.remaining() < Self::ENCODED_LEN {
25313            panic!(
25314                "buffer is too small (need {} bytes, but got {})",
25315                Self::ENCODED_LEN,
25316                __tmp.remaining(),
25317            )
25318        }
25319        __tmp.put_f32_le(self.p1x);
25320        __tmp.put_f32_le(self.p1y);
25321        __tmp.put_f32_le(self.p1z);
25322        __tmp.put_f32_le(self.p2x);
25323        __tmp.put_f32_le(self.p2y);
25324        __tmp.put_f32_le(self.p2z);
25325        __tmp.put_u8(self.frame as u8);
25326        if matches!(version, MavlinkVersion::V2) {
25327            let len = __tmp.len();
25328            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
25329        } else {
25330            __tmp.len()
25331        }
25332    }
25333}
25334#[doc = "id: 54"]
25335#[doc = "Set a safety zone (volume), which is defined by two corners of a cube. This message can be used to tell the MAV which setpoints/waypoints to accept and which to reject. Safety areas are often enforced by national or competition regulations."]
25336#[derive(Debug, Clone, PartialEq)]
25337#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25338#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25339pub struct SAFETY_SET_ALLOWED_AREA_DATA {
25340    #[doc = "x position 1 / Latitude 1"]
25341    pub p1x: f32,
25342    #[doc = "y position 1 / Longitude 1"]
25343    pub p1y: f32,
25344    #[doc = "z position 1 / Altitude 1"]
25345    pub p1z: f32,
25346    #[doc = "x position 2 / Latitude 2"]
25347    pub p2x: f32,
25348    #[doc = "y position 2 / Longitude 2"]
25349    pub p2y: f32,
25350    #[doc = "z position 2 / Altitude 2"]
25351    pub p2z: f32,
25352    #[doc = "System ID"]
25353    pub target_system: u8,
25354    #[doc = "Component ID"]
25355    pub target_component: u8,
25356    #[doc = "Coordinate frame. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down."]
25357    pub frame: MavFrame,
25358}
25359impl SAFETY_SET_ALLOWED_AREA_DATA {
25360    pub const ENCODED_LEN: usize = 27usize;
25361    pub const DEFAULT: Self = Self {
25362        p1x: 0.0_f32,
25363        p1y: 0.0_f32,
25364        p1z: 0.0_f32,
25365        p2x: 0.0_f32,
25366        p2y: 0.0_f32,
25367        p2z: 0.0_f32,
25368        target_system: 0_u8,
25369        target_component: 0_u8,
25370        frame: MavFrame::DEFAULT,
25371    };
25372    #[cfg(feature = "arbitrary")]
25373    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
25374        use arbitrary::{Arbitrary, Unstructured};
25375        let mut buf = [0u8; 1024];
25376        rng.fill_bytes(&mut buf);
25377        let mut unstructured = Unstructured::new(&buf);
25378        Self::arbitrary(&mut unstructured).unwrap_or_default()
25379    }
25380}
25381impl Default for SAFETY_SET_ALLOWED_AREA_DATA {
25382    fn default() -> Self {
25383        Self::DEFAULT.clone()
25384    }
25385}
25386impl MessageData for SAFETY_SET_ALLOWED_AREA_DATA {
25387    type Message = MavMessage;
25388    const ID: u32 = 54u32;
25389    const NAME: &'static str = "SAFETY_SET_ALLOWED_AREA";
25390    const EXTRA_CRC: u8 = 15u8;
25391    const ENCODED_LEN: usize = 27usize;
25392    fn deser(
25393        _version: MavlinkVersion,
25394        __input: &[u8],
25395    ) -> Result<Self, ::mavlink_core::error::ParserError> {
25396        let avail_len = __input.len();
25397        let mut payload_buf = [0; Self::ENCODED_LEN];
25398        let mut buf = if avail_len < Self::ENCODED_LEN {
25399            payload_buf[0..avail_len].copy_from_slice(__input);
25400            Bytes::new(&payload_buf)
25401        } else {
25402            Bytes::new(__input)
25403        };
25404        let mut __struct = Self::default();
25405        __struct.p1x = buf.get_f32_le();
25406        __struct.p1y = buf.get_f32_le();
25407        __struct.p1z = buf.get_f32_le();
25408        __struct.p2x = buf.get_f32_le();
25409        __struct.p2y = buf.get_f32_le();
25410        __struct.p2z = buf.get_f32_le();
25411        __struct.target_system = buf.get_u8();
25412        __struct.target_component = buf.get_u8();
25413        let tmp = buf.get_u8();
25414        __struct.frame =
25415            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
25416                enum_type: "MavFrame",
25417                value: tmp as u32,
25418            })?;
25419        Ok(__struct)
25420    }
25421    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
25422        let mut __tmp = BytesMut::new(bytes);
25423        #[allow(clippy::absurd_extreme_comparisons)]
25424        #[allow(unused_comparisons)]
25425        if __tmp.remaining() < Self::ENCODED_LEN {
25426            panic!(
25427                "buffer is too small (need {} bytes, but got {})",
25428                Self::ENCODED_LEN,
25429                __tmp.remaining(),
25430            )
25431        }
25432        __tmp.put_f32_le(self.p1x);
25433        __tmp.put_f32_le(self.p1y);
25434        __tmp.put_f32_le(self.p1z);
25435        __tmp.put_f32_le(self.p2x);
25436        __tmp.put_f32_le(self.p2y);
25437        __tmp.put_f32_le(self.p2z);
25438        __tmp.put_u8(self.target_system);
25439        __tmp.put_u8(self.target_component);
25440        __tmp.put_u8(self.frame as u8);
25441        if matches!(version, MavlinkVersion::V2) {
25442            let len = __tmp.len();
25443            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
25444        } else {
25445            __tmp.len()
25446        }
25447    }
25448}
25449#[doc = "id: 26"]
25450#[doc = "The RAW IMU readings for the usual 9DOF sensor setup. This message should contain the scaled values to the described units."]
25451#[derive(Debug, Clone, PartialEq)]
25452#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25453#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25454pub struct SCALED_IMU_DATA {
25455    #[doc = "Timestamp (time since system boot)."]
25456    pub time_boot_ms: u32,
25457    #[doc = "X acceleration"]
25458    pub xacc: i16,
25459    #[doc = "Y acceleration"]
25460    pub yacc: i16,
25461    #[doc = "Z acceleration"]
25462    pub zacc: i16,
25463    #[doc = "Angular speed around X axis"]
25464    pub xgyro: i16,
25465    #[doc = "Angular speed around Y axis"]
25466    pub ygyro: i16,
25467    #[doc = "Angular speed around Z axis"]
25468    pub zgyro: i16,
25469    #[doc = "X Magnetic field"]
25470    pub xmag: i16,
25471    #[doc = "Y Magnetic field"]
25472    pub ymag: i16,
25473    #[doc = "Z Magnetic field"]
25474    pub zmag: i16,
25475    #[doc = "Temperature, 0: IMU does not provide temperature values. If the IMU is at 0C it must send 1 (0.01C)."]
25476    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
25477    pub temperature: i16,
25478}
25479impl SCALED_IMU_DATA {
25480    pub const ENCODED_LEN: usize = 24usize;
25481    pub const DEFAULT: Self = Self {
25482        time_boot_ms: 0_u32,
25483        xacc: 0_i16,
25484        yacc: 0_i16,
25485        zacc: 0_i16,
25486        xgyro: 0_i16,
25487        ygyro: 0_i16,
25488        zgyro: 0_i16,
25489        xmag: 0_i16,
25490        ymag: 0_i16,
25491        zmag: 0_i16,
25492        temperature: 0_i16,
25493    };
25494    #[cfg(feature = "arbitrary")]
25495    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
25496        use arbitrary::{Arbitrary, Unstructured};
25497        let mut buf = [0u8; 1024];
25498        rng.fill_bytes(&mut buf);
25499        let mut unstructured = Unstructured::new(&buf);
25500        Self::arbitrary(&mut unstructured).unwrap_or_default()
25501    }
25502}
25503impl Default for SCALED_IMU_DATA {
25504    fn default() -> Self {
25505        Self::DEFAULT.clone()
25506    }
25507}
25508impl MessageData for SCALED_IMU_DATA {
25509    type Message = MavMessage;
25510    const ID: u32 = 26u32;
25511    const NAME: &'static str = "SCALED_IMU";
25512    const EXTRA_CRC: u8 = 170u8;
25513    const ENCODED_LEN: usize = 24usize;
25514    fn deser(
25515        _version: MavlinkVersion,
25516        __input: &[u8],
25517    ) -> Result<Self, ::mavlink_core::error::ParserError> {
25518        let avail_len = __input.len();
25519        let mut payload_buf = [0; Self::ENCODED_LEN];
25520        let mut buf = if avail_len < Self::ENCODED_LEN {
25521            payload_buf[0..avail_len].copy_from_slice(__input);
25522            Bytes::new(&payload_buf)
25523        } else {
25524            Bytes::new(__input)
25525        };
25526        let mut __struct = Self::default();
25527        __struct.time_boot_ms = buf.get_u32_le();
25528        __struct.xacc = buf.get_i16_le();
25529        __struct.yacc = buf.get_i16_le();
25530        __struct.zacc = buf.get_i16_le();
25531        __struct.xgyro = buf.get_i16_le();
25532        __struct.ygyro = buf.get_i16_le();
25533        __struct.zgyro = buf.get_i16_le();
25534        __struct.xmag = buf.get_i16_le();
25535        __struct.ymag = buf.get_i16_le();
25536        __struct.zmag = buf.get_i16_le();
25537        __struct.temperature = buf.get_i16_le();
25538        Ok(__struct)
25539    }
25540    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
25541        let mut __tmp = BytesMut::new(bytes);
25542        #[allow(clippy::absurd_extreme_comparisons)]
25543        #[allow(unused_comparisons)]
25544        if __tmp.remaining() < Self::ENCODED_LEN {
25545            panic!(
25546                "buffer is too small (need {} bytes, but got {})",
25547                Self::ENCODED_LEN,
25548                __tmp.remaining(),
25549            )
25550        }
25551        __tmp.put_u32_le(self.time_boot_ms);
25552        __tmp.put_i16_le(self.xacc);
25553        __tmp.put_i16_le(self.yacc);
25554        __tmp.put_i16_le(self.zacc);
25555        __tmp.put_i16_le(self.xgyro);
25556        __tmp.put_i16_le(self.ygyro);
25557        __tmp.put_i16_le(self.zgyro);
25558        __tmp.put_i16_le(self.xmag);
25559        __tmp.put_i16_le(self.ymag);
25560        __tmp.put_i16_le(self.zmag);
25561        __tmp.put_i16_le(self.temperature);
25562        if matches!(version, MavlinkVersion::V2) {
25563            let len = __tmp.len();
25564            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
25565        } else {
25566            __tmp.len()
25567        }
25568    }
25569}
25570#[doc = "id: 116"]
25571#[doc = "The RAW IMU readings for secondary 9DOF sensor setup. This message should contain the scaled values to the described units."]
25572#[derive(Debug, Clone, PartialEq)]
25573#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25574#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25575pub struct SCALED_IMU2_DATA {
25576    #[doc = "Timestamp (time since system boot)."]
25577    pub time_boot_ms: u32,
25578    #[doc = "X acceleration"]
25579    pub xacc: i16,
25580    #[doc = "Y acceleration"]
25581    pub yacc: i16,
25582    #[doc = "Z acceleration"]
25583    pub zacc: i16,
25584    #[doc = "Angular speed around X axis"]
25585    pub xgyro: i16,
25586    #[doc = "Angular speed around Y axis"]
25587    pub ygyro: i16,
25588    #[doc = "Angular speed around Z axis"]
25589    pub zgyro: i16,
25590    #[doc = "X Magnetic field"]
25591    pub xmag: i16,
25592    #[doc = "Y Magnetic field"]
25593    pub ymag: i16,
25594    #[doc = "Z Magnetic field"]
25595    pub zmag: i16,
25596    #[doc = "Temperature, 0: IMU does not provide temperature values. If the IMU is at 0C it must send 1 (0.01C)."]
25597    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
25598    pub temperature: i16,
25599}
25600impl SCALED_IMU2_DATA {
25601    pub const ENCODED_LEN: usize = 24usize;
25602    pub const DEFAULT: Self = Self {
25603        time_boot_ms: 0_u32,
25604        xacc: 0_i16,
25605        yacc: 0_i16,
25606        zacc: 0_i16,
25607        xgyro: 0_i16,
25608        ygyro: 0_i16,
25609        zgyro: 0_i16,
25610        xmag: 0_i16,
25611        ymag: 0_i16,
25612        zmag: 0_i16,
25613        temperature: 0_i16,
25614    };
25615    #[cfg(feature = "arbitrary")]
25616    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
25617        use arbitrary::{Arbitrary, Unstructured};
25618        let mut buf = [0u8; 1024];
25619        rng.fill_bytes(&mut buf);
25620        let mut unstructured = Unstructured::new(&buf);
25621        Self::arbitrary(&mut unstructured).unwrap_or_default()
25622    }
25623}
25624impl Default for SCALED_IMU2_DATA {
25625    fn default() -> Self {
25626        Self::DEFAULT.clone()
25627    }
25628}
25629impl MessageData for SCALED_IMU2_DATA {
25630    type Message = MavMessage;
25631    const ID: u32 = 116u32;
25632    const NAME: &'static str = "SCALED_IMU2";
25633    const EXTRA_CRC: u8 = 76u8;
25634    const ENCODED_LEN: usize = 24usize;
25635    fn deser(
25636        _version: MavlinkVersion,
25637        __input: &[u8],
25638    ) -> Result<Self, ::mavlink_core::error::ParserError> {
25639        let avail_len = __input.len();
25640        let mut payload_buf = [0; Self::ENCODED_LEN];
25641        let mut buf = if avail_len < Self::ENCODED_LEN {
25642            payload_buf[0..avail_len].copy_from_slice(__input);
25643            Bytes::new(&payload_buf)
25644        } else {
25645            Bytes::new(__input)
25646        };
25647        let mut __struct = Self::default();
25648        __struct.time_boot_ms = buf.get_u32_le();
25649        __struct.xacc = buf.get_i16_le();
25650        __struct.yacc = buf.get_i16_le();
25651        __struct.zacc = buf.get_i16_le();
25652        __struct.xgyro = buf.get_i16_le();
25653        __struct.ygyro = buf.get_i16_le();
25654        __struct.zgyro = buf.get_i16_le();
25655        __struct.xmag = buf.get_i16_le();
25656        __struct.ymag = buf.get_i16_le();
25657        __struct.zmag = buf.get_i16_le();
25658        __struct.temperature = buf.get_i16_le();
25659        Ok(__struct)
25660    }
25661    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
25662        let mut __tmp = BytesMut::new(bytes);
25663        #[allow(clippy::absurd_extreme_comparisons)]
25664        #[allow(unused_comparisons)]
25665        if __tmp.remaining() < Self::ENCODED_LEN {
25666            panic!(
25667                "buffer is too small (need {} bytes, but got {})",
25668                Self::ENCODED_LEN,
25669                __tmp.remaining(),
25670            )
25671        }
25672        __tmp.put_u32_le(self.time_boot_ms);
25673        __tmp.put_i16_le(self.xacc);
25674        __tmp.put_i16_le(self.yacc);
25675        __tmp.put_i16_le(self.zacc);
25676        __tmp.put_i16_le(self.xgyro);
25677        __tmp.put_i16_le(self.ygyro);
25678        __tmp.put_i16_le(self.zgyro);
25679        __tmp.put_i16_le(self.xmag);
25680        __tmp.put_i16_le(self.ymag);
25681        __tmp.put_i16_le(self.zmag);
25682        __tmp.put_i16_le(self.temperature);
25683        if matches!(version, MavlinkVersion::V2) {
25684            let len = __tmp.len();
25685            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
25686        } else {
25687            __tmp.len()
25688        }
25689    }
25690}
25691#[doc = "id: 129"]
25692#[doc = "The RAW IMU readings for 3rd 9DOF sensor setup. This message should contain the scaled values to the described units."]
25693#[derive(Debug, Clone, PartialEq)]
25694#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25695#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25696pub struct SCALED_IMU3_DATA {
25697    #[doc = "Timestamp (time since system boot)."]
25698    pub time_boot_ms: u32,
25699    #[doc = "X acceleration"]
25700    pub xacc: i16,
25701    #[doc = "Y acceleration"]
25702    pub yacc: i16,
25703    #[doc = "Z acceleration"]
25704    pub zacc: i16,
25705    #[doc = "Angular speed around X axis"]
25706    pub xgyro: i16,
25707    #[doc = "Angular speed around Y axis"]
25708    pub ygyro: i16,
25709    #[doc = "Angular speed around Z axis"]
25710    pub zgyro: i16,
25711    #[doc = "X Magnetic field"]
25712    pub xmag: i16,
25713    #[doc = "Y Magnetic field"]
25714    pub ymag: i16,
25715    #[doc = "Z Magnetic field"]
25716    pub zmag: i16,
25717    #[doc = "Temperature, 0: IMU does not provide temperature values. If the IMU is at 0C it must send 1 (0.01C)."]
25718    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
25719    pub temperature: i16,
25720}
25721impl SCALED_IMU3_DATA {
25722    pub const ENCODED_LEN: usize = 24usize;
25723    pub const DEFAULT: Self = Self {
25724        time_boot_ms: 0_u32,
25725        xacc: 0_i16,
25726        yacc: 0_i16,
25727        zacc: 0_i16,
25728        xgyro: 0_i16,
25729        ygyro: 0_i16,
25730        zgyro: 0_i16,
25731        xmag: 0_i16,
25732        ymag: 0_i16,
25733        zmag: 0_i16,
25734        temperature: 0_i16,
25735    };
25736    #[cfg(feature = "arbitrary")]
25737    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
25738        use arbitrary::{Arbitrary, Unstructured};
25739        let mut buf = [0u8; 1024];
25740        rng.fill_bytes(&mut buf);
25741        let mut unstructured = Unstructured::new(&buf);
25742        Self::arbitrary(&mut unstructured).unwrap_or_default()
25743    }
25744}
25745impl Default for SCALED_IMU3_DATA {
25746    fn default() -> Self {
25747        Self::DEFAULT.clone()
25748    }
25749}
25750impl MessageData for SCALED_IMU3_DATA {
25751    type Message = MavMessage;
25752    const ID: u32 = 129u32;
25753    const NAME: &'static str = "SCALED_IMU3";
25754    const EXTRA_CRC: u8 = 46u8;
25755    const ENCODED_LEN: usize = 24usize;
25756    fn deser(
25757        _version: MavlinkVersion,
25758        __input: &[u8],
25759    ) -> Result<Self, ::mavlink_core::error::ParserError> {
25760        let avail_len = __input.len();
25761        let mut payload_buf = [0; Self::ENCODED_LEN];
25762        let mut buf = if avail_len < Self::ENCODED_LEN {
25763            payload_buf[0..avail_len].copy_from_slice(__input);
25764            Bytes::new(&payload_buf)
25765        } else {
25766            Bytes::new(__input)
25767        };
25768        let mut __struct = Self::default();
25769        __struct.time_boot_ms = buf.get_u32_le();
25770        __struct.xacc = buf.get_i16_le();
25771        __struct.yacc = buf.get_i16_le();
25772        __struct.zacc = buf.get_i16_le();
25773        __struct.xgyro = buf.get_i16_le();
25774        __struct.ygyro = buf.get_i16_le();
25775        __struct.zgyro = buf.get_i16_le();
25776        __struct.xmag = buf.get_i16_le();
25777        __struct.ymag = buf.get_i16_le();
25778        __struct.zmag = buf.get_i16_le();
25779        __struct.temperature = buf.get_i16_le();
25780        Ok(__struct)
25781    }
25782    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
25783        let mut __tmp = BytesMut::new(bytes);
25784        #[allow(clippy::absurd_extreme_comparisons)]
25785        #[allow(unused_comparisons)]
25786        if __tmp.remaining() < Self::ENCODED_LEN {
25787            panic!(
25788                "buffer is too small (need {} bytes, but got {})",
25789                Self::ENCODED_LEN,
25790                __tmp.remaining(),
25791            )
25792        }
25793        __tmp.put_u32_le(self.time_boot_ms);
25794        __tmp.put_i16_le(self.xacc);
25795        __tmp.put_i16_le(self.yacc);
25796        __tmp.put_i16_le(self.zacc);
25797        __tmp.put_i16_le(self.xgyro);
25798        __tmp.put_i16_le(self.ygyro);
25799        __tmp.put_i16_le(self.zgyro);
25800        __tmp.put_i16_le(self.xmag);
25801        __tmp.put_i16_le(self.ymag);
25802        __tmp.put_i16_le(self.zmag);
25803        __tmp.put_i16_le(self.temperature);
25804        if matches!(version, MavlinkVersion::V2) {
25805            let len = __tmp.len();
25806            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
25807        } else {
25808            __tmp.len()
25809        }
25810    }
25811}
25812#[doc = "id: 29"]
25813#[doc = "The pressure readings for the typical setup of one absolute and differential pressure sensor. The units are as specified in each field."]
25814#[derive(Debug, Clone, PartialEq)]
25815#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25816#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25817pub struct SCALED_PRESSURE_DATA {
25818    #[doc = "Timestamp (time since system boot)."]
25819    pub time_boot_ms: u32,
25820    #[doc = "Absolute pressure"]
25821    pub press_abs: f32,
25822    #[doc = "Differential pressure 1"]
25823    pub press_diff: f32,
25824    #[doc = "Absolute pressure temperature"]
25825    pub temperature: i16,
25826    #[doc = "Differential pressure temperature (0, if not available). Report values of 0 (or 1) as 1 cdegC."]
25827    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
25828    pub temperature_press_diff: i16,
25829}
25830impl SCALED_PRESSURE_DATA {
25831    pub const ENCODED_LEN: usize = 16usize;
25832    pub const DEFAULT: Self = Self {
25833        time_boot_ms: 0_u32,
25834        press_abs: 0.0_f32,
25835        press_diff: 0.0_f32,
25836        temperature: 0_i16,
25837        temperature_press_diff: 0_i16,
25838    };
25839    #[cfg(feature = "arbitrary")]
25840    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
25841        use arbitrary::{Arbitrary, Unstructured};
25842        let mut buf = [0u8; 1024];
25843        rng.fill_bytes(&mut buf);
25844        let mut unstructured = Unstructured::new(&buf);
25845        Self::arbitrary(&mut unstructured).unwrap_or_default()
25846    }
25847}
25848impl Default for SCALED_PRESSURE_DATA {
25849    fn default() -> Self {
25850        Self::DEFAULT.clone()
25851    }
25852}
25853impl MessageData for SCALED_PRESSURE_DATA {
25854    type Message = MavMessage;
25855    const ID: u32 = 29u32;
25856    const NAME: &'static str = "SCALED_PRESSURE";
25857    const EXTRA_CRC: u8 = 115u8;
25858    const ENCODED_LEN: usize = 16usize;
25859    fn deser(
25860        _version: MavlinkVersion,
25861        __input: &[u8],
25862    ) -> Result<Self, ::mavlink_core::error::ParserError> {
25863        let avail_len = __input.len();
25864        let mut payload_buf = [0; Self::ENCODED_LEN];
25865        let mut buf = if avail_len < Self::ENCODED_LEN {
25866            payload_buf[0..avail_len].copy_from_slice(__input);
25867            Bytes::new(&payload_buf)
25868        } else {
25869            Bytes::new(__input)
25870        };
25871        let mut __struct = Self::default();
25872        __struct.time_boot_ms = buf.get_u32_le();
25873        __struct.press_abs = buf.get_f32_le();
25874        __struct.press_diff = buf.get_f32_le();
25875        __struct.temperature = buf.get_i16_le();
25876        __struct.temperature_press_diff = buf.get_i16_le();
25877        Ok(__struct)
25878    }
25879    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
25880        let mut __tmp = BytesMut::new(bytes);
25881        #[allow(clippy::absurd_extreme_comparisons)]
25882        #[allow(unused_comparisons)]
25883        if __tmp.remaining() < Self::ENCODED_LEN {
25884            panic!(
25885                "buffer is too small (need {} bytes, but got {})",
25886                Self::ENCODED_LEN,
25887                __tmp.remaining(),
25888            )
25889        }
25890        __tmp.put_u32_le(self.time_boot_ms);
25891        __tmp.put_f32_le(self.press_abs);
25892        __tmp.put_f32_le(self.press_diff);
25893        __tmp.put_i16_le(self.temperature);
25894        __tmp.put_i16_le(self.temperature_press_diff);
25895        if matches!(version, MavlinkVersion::V2) {
25896            let len = __tmp.len();
25897            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
25898        } else {
25899            __tmp.len()
25900        }
25901    }
25902}
25903#[doc = "id: 137"]
25904#[doc = "Barometer readings for 2nd barometer."]
25905#[derive(Debug, Clone, PartialEq)]
25906#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25907#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25908pub struct SCALED_PRESSURE2_DATA {
25909    #[doc = "Timestamp (time since system boot)."]
25910    pub time_boot_ms: u32,
25911    #[doc = "Absolute pressure"]
25912    pub press_abs: f32,
25913    #[doc = "Differential pressure"]
25914    pub press_diff: f32,
25915    #[doc = "Absolute pressure temperature"]
25916    pub temperature: i16,
25917    #[doc = "Differential pressure temperature (0, if not available). Report values of 0 (or 1) as 1 cdegC."]
25918    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
25919    pub temperature_press_diff: i16,
25920}
25921impl SCALED_PRESSURE2_DATA {
25922    pub const ENCODED_LEN: usize = 16usize;
25923    pub const DEFAULT: Self = Self {
25924        time_boot_ms: 0_u32,
25925        press_abs: 0.0_f32,
25926        press_diff: 0.0_f32,
25927        temperature: 0_i16,
25928        temperature_press_diff: 0_i16,
25929    };
25930    #[cfg(feature = "arbitrary")]
25931    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
25932        use arbitrary::{Arbitrary, Unstructured};
25933        let mut buf = [0u8; 1024];
25934        rng.fill_bytes(&mut buf);
25935        let mut unstructured = Unstructured::new(&buf);
25936        Self::arbitrary(&mut unstructured).unwrap_or_default()
25937    }
25938}
25939impl Default for SCALED_PRESSURE2_DATA {
25940    fn default() -> Self {
25941        Self::DEFAULT.clone()
25942    }
25943}
25944impl MessageData for SCALED_PRESSURE2_DATA {
25945    type Message = MavMessage;
25946    const ID: u32 = 137u32;
25947    const NAME: &'static str = "SCALED_PRESSURE2";
25948    const EXTRA_CRC: u8 = 195u8;
25949    const ENCODED_LEN: usize = 16usize;
25950    fn deser(
25951        _version: MavlinkVersion,
25952        __input: &[u8],
25953    ) -> Result<Self, ::mavlink_core::error::ParserError> {
25954        let avail_len = __input.len();
25955        let mut payload_buf = [0; Self::ENCODED_LEN];
25956        let mut buf = if avail_len < Self::ENCODED_LEN {
25957            payload_buf[0..avail_len].copy_from_slice(__input);
25958            Bytes::new(&payload_buf)
25959        } else {
25960            Bytes::new(__input)
25961        };
25962        let mut __struct = Self::default();
25963        __struct.time_boot_ms = buf.get_u32_le();
25964        __struct.press_abs = buf.get_f32_le();
25965        __struct.press_diff = buf.get_f32_le();
25966        __struct.temperature = buf.get_i16_le();
25967        __struct.temperature_press_diff = buf.get_i16_le();
25968        Ok(__struct)
25969    }
25970    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
25971        let mut __tmp = BytesMut::new(bytes);
25972        #[allow(clippy::absurd_extreme_comparisons)]
25973        #[allow(unused_comparisons)]
25974        if __tmp.remaining() < Self::ENCODED_LEN {
25975            panic!(
25976                "buffer is too small (need {} bytes, but got {})",
25977                Self::ENCODED_LEN,
25978                __tmp.remaining(),
25979            )
25980        }
25981        __tmp.put_u32_le(self.time_boot_ms);
25982        __tmp.put_f32_le(self.press_abs);
25983        __tmp.put_f32_le(self.press_diff);
25984        __tmp.put_i16_le(self.temperature);
25985        __tmp.put_i16_le(self.temperature_press_diff);
25986        if matches!(version, MavlinkVersion::V2) {
25987            let len = __tmp.len();
25988            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
25989        } else {
25990            __tmp.len()
25991        }
25992    }
25993}
25994#[doc = "id: 143"]
25995#[doc = "Barometer readings for 3rd barometer."]
25996#[derive(Debug, Clone, PartialEq)]
25997#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25998#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25999pub struct SCALED_PRESSURE3_DATA {
26000    #[doc = "Timestamp (time since system boot)."]
26001    pub time_boot_ms: u32,
26002    #[doc = "Absolute pressure"]
26003    pub press_abs: f32,
26004    #[doc = "Differential pressure"]
26005    pub press_diff: f32,
26006    #[doc = "Absolute pressure temperature"]
26007    pub temperature: i16,
26008    #[doc = "Differential pressure temperature (0, if not available). Report values of 0 (or 1) as 1 cdegC."]
26009    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26010    pub temperature_press_diff: i16,
26011}
26012impl SCALED_PRESSURE3_DATA {
26013    pub const ENCODED_LEN: usize = 16usize;
26014    pub const DEFAULT: Self = Self {
26015        time_boot_ms: 0_u32,
26016        press_abs: 0.0_f32,
26017        press_diff: 0.0_f32,
26018        temperature: 0_i16,
26019        temperature_press_diff: 0_i16,
26020    };
26021    #[cfg(feature = "arbitrary")]
26022    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
26023        use arbitrary::{Arbitrary, Unstructured};
26024        let mut buf = [0u8; 1024];
26025        rng.fill_bytes(&mut buf);
26026        let mut unstructured = Unstructured::new(&buf);
26027        Self::arbitrary(&mut unstructured).unwrap_or_default()
26028    }
26029}
26030impl Default for SCALED_PRESSURE3_DATA {
26031    fn default() -> Self {
26032        Self::DEFAULT.clone()
26033    }
26034}
26035impl MessageData for SCALED_PRESSURE3_DATA {
26036    type Message = MavMessage;
26037    const ID: u32 = 143u32;
26038    const NAME: &'static str = "SCALED_PRESSURE3";
26039    const EXTRA_CRC: u8 = 131u8;
26040    const ENCODED_LEN: usize = 16usize;
26041    fn deser(
26042        _version: MavlinkVersion,
26043        __input: &[u8],
26044    ) -> Result<Self, ::mavlink_core::error::ParserError> {
26045        let avail_len = __input.len();
26046        let mut payload_buf = [0; Self::ENCODED_LEN];
26047        let mut buf = if avail_len < Self::ENCODED_LEN {
26048            payload_buf[0..avail_len].copy_from_slice(__input);
26049            Bytes::new(&payload_buf)
26050        } else {
26051            Bytes::new(__input)
26052        };
26053        let mut __struct = Self::default();
26054        __struct.time_boot_ms = buf.get_u32_le();
26055        __struct.press_abs = buf.get_f32_le();
26056        __struct.press_diff = buf.get_f32_le();
26057        __struct.temperature = buf.get_i16_le();
26058        __struct.temperature_press_diff = buf.get_i16_le();
26059        Ok(__struct)
26060    }
26061    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
26062        let mut __tmp = BytesMut::new(bytes);
26063        #[allow(clippy::absurd_extreme_comparisons)]
26064        #[allow(unused_comparisons)]
26065        if __tmp.remaining() < Self::ENCODED_LEN {
26066            panic!(
26067                "buffer is too small (need {} bytes, but got {})",
26068                Self::ENCODED_LEN,
26069                __tmp.remaining(),
26070            )
26071        }
26072        __tmp.put_u32_le(self.time_boot_ms);
26073        __tmp.put_f32_le(self.press_abs);
26074        __tmp.put_f32_le(self.press_diff);
26075        __tmp.put_i16_le(self.temperature);
26076        __tmp.put_i16_le(self.temperature_press_diff);
26077        if matches!(version, MavlinkVersion::V2) {
26078            let len = __tmp.len();
26079            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
26080        } else {
26081            __tmp.len()
26082        }
26083    }
26084}
26085#[doc = "id: 126"]
26086#[doc = "Control a serial port. This can be used for raw access to an onboard serial peripheral such as a GPS or telemetry radio. It is designed to make it possible to update the devices firmware via MAVLink messages or change the devices settings. A message with zero bytes can be used to change just the baudrate."]
26087#[derive(Debug, Clone, PartialEq)]
26088#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26089#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26090pub struct SERIAL_CONTROL_DATA {
26091    #[doc = "Baudrate of transfer. Zero means no change."]
26092    pub baudrate: u32,
26093    #[doc = "Timeout for reply data"]
26094    pub timeout: u16,
26095    #[doc = "Serial control device type."]
26096    pub device: SerialControlDev,
26097    #[doc = "Bitmap of serial control flags."]
26098    pub flags: SerialControlFlag,
26099    #[doc = "how many bytes in this transfer"]
26100    pub count: u8,
26101    #[doc = "serial data"]
26102    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
26103    pub data: [u8; 70],
26104    #[doc = "System ID"]
26105    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26106    pub target_system: u8,
26107    #[doc = "Component ID"]
26108    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26109    pub target_component: u8,
26110}
26111impl SERIAL_CONTROL_DATA {
26112    pub const ENCODED_LEN: usize = 81usize;
26113    pub const DEFAULT: Self = Self {
26114        baudrate: 0_u32,
26115        timeout: 0_u16,
26116        device: SerialControlDev::DEFAULT,
26117        flags: SerialControlFlag::DEFAULT,
26118        count: 0_u8,
26119        data: [0_u8; 70usize],
26120        target_system: 0_u8,
26121        target_component: 0_u8,
26122    };
26123    #[cfg(feature = "arbitrary")]
26124    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
26125        use arbitrary::{Arbitrary, Unstructured};
26126        let mut buf = [0u8; 1024];
26127        rng.fill_bytes(&mut buf);
26128        let mut unstructured = Unstructured::new(&buf);
26129        Self::arbitrary(&mut unstructured).unwrap_or_default()
26130    }
26131}
26132impl Default for SERIAL_CONTROL_DATA {
26133    fn default() -> Self {
26134        Self::DEFAULT.clone()
26135    }
26136}
26137impl MessageData for SERIAL_CONTROL_DATA {
26138    type Message = MavMessage;
26139    const ID: u32 = 126u32;
26140    const NAME: &'static str = "SERIAL_CONTROL";
26141    const EXTRA_CRC: u8 = 220u8;
26142    const ENCODED_LEN: usize = 81usize;
26143    fn deser(
26144        _version: MavlinkVersion,
26145        __input: &[u8],
26146    ) -> Result<Self, ::mavlink_core::error::ParserError> {
26147        let avail_len = __input.len();
26148        let mut payload_buf = [0; Self::ENCODED_LEN];
26149        let mut buf = if avail_len < Self::ENCODED_LEN {
26150            payload_buf[0..avail_len].copy_from_slice(__input);
26151            Bytes::new(&payload_buf)
26152        } else {
26153            Bytes::new(__input)
26154        };
26155        let mut __struct = Self::default();
26156        __struct.baudrate = buf.get_u32_le();
26157        __struct.timeout = buf.get_u16_le();
26158        let tmp = buf.get_u8();
26159        __struct.device =
26160            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
26161                enum_type: "SerialControlDev",
26162                value: tmp as u32,
26163            })?;
26164        let tmp = buf.get_u8();
26165        __struct.flags = SerialControlFlag::from_bits(tmp & SerialControlFlag::all().bits())
26166            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
26167                flag_type: "SerialControlFlag",
26168                value: tmp as u32,
26169            })?;
26170        __struct.count = buf.get_u8();
26171        for v in &mut __struct.data {
26172            let val = buf.get_u8();
26173            *v = val;
26174        }
26175        __struct.target_system = buf.get_u8();
26176        __struct.target_component = buf.get_u8();
26177        Ok(__struct)
26178    }
26179    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
26180        let mut __tmp = BytesMut::new(bytes);
26181        #[allow(clippy::absurd_extreme_comparisons)]
26182        #[allow(unused_comparisons)]
26183        if __tmp.remaining() < Self::ENCODED_LEN {
26184            panic!(
26185                "buffer is too small (need {} bytes, but got {})",
26186                Self::ENCODED_LEN,
26187                __tmp.remaining(),
26188            )
26189        }
26190        __tmp.put_u32_le(self.baudrate);
26191        __tmp.put_u16_le(self.timeout);
26192        __tmp.put_u8(self.device as u8);
26193        __tmp.put_u8(self.flags.bits());
26194        __tmp.put_u8(self.count);
26195        for val in &self.data {
26196            __tmp.put_u8(*val);
26197        }
26198        __tmp.put_u8(self.target_system);
26199        __tmp.put_u8(self.target_component);
26200        if matches!(version, MavlinkVersion::V2) {
26201            let len = __tmp.len();
26202            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
26203        } else {
26204            __tmp.len()
26205        }
26206    }
26207}
26208#[doc = "id: 36"]
26209#[doc = "Superseded by ACTUATOR_OUTPUT_STATUS. The RAW values of the servo outputs (for RC input from the remote, use the RC_CHANNELS messages). The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%."]
26210#[derive(Debug, Clone, PartialEq)]
26211#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26212#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26213pub struct SERVO_OUTPUT_RAW_DATA {
26214    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
26215    pub time_usec: u32,
26216    #[doc = "Servo output 1 value"]
26217    pub servo1_raw: u16,
26218    #[doc = "Servo output 2 value"]
26219    pub servo2_raw: u16,
26220    #[doc = "Servo output 3 value"]
26221    pub servo3_raw: u16,
26222    #[doc = "Servo output 4 value"]
26223    pub servo4_raw: u16,
26224    #[doc = "Servo output 5 value"]
26225    pub servo5_raw: u16,
26226    #[doc = "Servo output 6 value"]
26227    pub servo6_raw: u16,
26228    #[doc = "Servo output 7 value"]
26229    pub servo7_raw: u16,
26230    #[doc = "Servo output 8 value"]
26231    pub servo8_raw: u16,
26232    #[doc = "Servo output port (set of 8 outputs = 1 port). Flight stacks running on Pixhawk should use: 0 = MAIN, 1 = AUX."]
26233    pub port: u8,
26234    #[doc = "Servo output 9 value"]
26235    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26236    pub servo9_raw: u16,
26237    #[doc = "Servo output 10 value"]
26238    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26239    pub servo10_raw: u16,
26240    #[doc = "Servo output 11 value"]
26241    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26242    pub servo11_raw: u16,
26243    #[doc = "Servo output 12 value"]
26244    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26245    pub servo12_raw: u16,
26246    #[doc = "Servo output 13 value"]
26247    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26248    pub servo13_raw: u16,
26249    #[doc = "Servo output 14 value"]
26250    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26251    pub servo14_raw: u16,
26252    #[doc = "Servo output 15 value"]
26253    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26254    pub servo15_raw: u16,
26255    #[doc = "Servo output 16 value"]
26256    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26257    pub servo16_raw: u16,
26258}
26259impl SERVO_OUTPUT_RAW_DATA {
26260    pub const ENCODED_LEN: usize = 37usize;
26261    pub const DEFAULT: Self = Self {
26262        time_usec: 0_u32,
26263        servo1_raw: 0_u16,
26264        servo2_raw: 0_u16,
26265        servo3_raw: 0_u16,
26266        servo4_raw: 0_u16,
26267        servo5_raw: 0_u16,
26268        servo6_raw: 0_u16,
26269        servo7_raw: 0_u16,
26270        servo8_raw: 0_u16,
26271        port: 0_u8,
26272        servo9_raw: 0_u16,
26273        servo10_raw: 0_u16,
26274        servo11_raw: 0_u16,
26275        servo12_raw: 0_u16,
26276        servo13_raw: 0_u16,
26277        servo14_raw: 0_u16,
26278        servo15_raw: 0_u16,
26279        servo16_raw: 0_u16,
26280    };
26281    #[cfg(feature = "arbitrary")]
26282    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
26283        use arbitrary::{Arbitrary, Unstructured};
26284        let mut buf = [0u8; 1024];
26285        rng.fill_bytes(&mut buf);
26286        let mut unstructured = Unstructured::new(&buf);
26287        Self::arbitrary(&mut unstructured).unwrap_or_default()
26288    }
26289}
26290impl Default for SERVO_OUTPUT_RAW_DATA {
26291    fn default() -> Self {
26292        Self::DEFAULT.clone()
26293    }
26294}
26295impl MessageData for SERVO_OUTPUT_RAW_DATA {
26296    type Message = MavMessage;
26297    const ID: u32 = 36u32;
26298    const NAME: &'static str = "SERVO_OUTPUT_RAW";
26299    const EXTRA_CRC: u8 = 222u8;
26300    const ENCODED_LEN: usize = 37usize;
26301    fn deser(
26302        _version: MavlinkVersion,
26303        __input: &[u8],
26304    ) -> Result<Self, ::mavlink_core::error::ParserError> {
26305        let avail_len = __input.len();
26306        let mut payload_buf = [0; Self::ENCODED_LEN];
26307        let mut buf = if avail_len < Self::ENCODED_LEN {
26308            payload_buf[0..avail_len].copy_from_slice(__input);
26309            Bytes::new(&payload_buf)
26310        } else {
26311            Bytes::new(__input)
26312        };
26313        let mut __struct = Self::default();
26314        __struct.time_usec = buf.get_u32_le();
26315        __struct.servo1_raw = buf.get_u16_le();
26316        __struct.servo2_raw = buf.get_u16_le();
26317        __struct.servo3_raw = buf.get_u16_le();
26318        __struct.servo4_raw = buf.get_u16_le();
26319        __struct.servo5_raw = buf.get_u16_le();
26320        __struct.servo6_raw = buf.get_u16_le();
26321        __struct.servo7_raw = buf.get_u16_le();
26322        __struct.servo8_raw = buf.get_u16_le();
26323        __struct.port = buf.get_u8();
26324        __struct.servo9_raw = buf.get_u16_le();
26325        __struct.servo10_raw = buf.get_u16_le();
26326        __struct.servo11_raw = buf.get_u16_le();
26327        __struct.servo12_raw = buf.get_u16_le();
26328        __struct.servo13_raw = buf.get_u16_le();
26329        __struct.servo14_raw = buf.get_u16_le();
26330        __struct.servo15_raw = buf.get_u16_le();
26331        __struct.servo16_raw = buf.get_u16_le();
26332        Ok(__struct)
26333    }
26334    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
26335        let mut __tmp = BytesMut::new(bytes);
26336        #[allow(clippy::absurd_extreme_comparisons)]
26337        #[allow(unused_comparisons)]
26338        if __tmp.remaining() < Self::ENCODED_LEN {
26339            panic!(
26340                "buffer is too small (need {} bytes, but got {})",
26341                Self::ENCODED_LEN,
26342                __tmp.remaining(),
26343            )
26344        }
26345        __tmp.put_u32_le(self.time_usec);
26346        __tmp.put_u16_le(self.servo1_raw);
26347        __tmp.put_u16_le(self.servo2_raw);
26348        __tmp.put_u16_le(self.servo3_raw);
26349        __tmp.put_u16_le(self.servo4_raw);
26350        __tmp.put_u16_le(self.servo5_raw);
26351        __tmp.put_u16_le(self.servo6_raw);
26352        __tmp.put_u16_le(self.servo7_raw);
26353        __tmp.put_u16_le(self.servo8_raw);
26354        __tmp.put_u8(self.port);
26355        __tmp.put_u16_le(self.servo9_raw);
26356        __tmp.put_u16_le(self.servo10_raw);
26357        __tmp.put_u16_le(self.servo11_raw);
26358        __tmp.put_u16_le(self.servo12_raw);
26359        __tmp.put_u16_le(self.servo13_raw);
26360        __tmp.put_u16_le(self.servo14_raw);
26361        __tmp.put_u16_le(self.servo15_raw);
26362        __tmp.put_u16_le(self.servo16_raw);
26363        if matches!(version, MavlinkVersion::V2) {
26364            let len = __tmp.len();
26365            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
26366        } else {
26367            __tmp.len()
26368        }
26369    }
26370}
26371#[doc = "id: 256"]
26372#[doc = "Setup a MAVLink2 signing key. If called with secret_key of all zero and zero initial_timestamp will disable signing."]
26373#[derive(Debug, Clone, PartialEq)]
26374#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26375#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26376pub struct SETUP_SIGNING_DATA {
26377    #[doc = "initial timestamp"]
26378    pub initial_timestamp: u64,
26379    #[doc = "system id of the target"]
26380    pub target_system: u8,
26381    #[doc = "component ID of the target"]
26382    pub target_component: u8,
26383    #[doc = "signing key"]
26384    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
26385    pub secret_key: [u8; 32],
26386}
26387impl SETUP_SIGNING_DATA {
26388    pub const ENCODED_LEN: usize = 42usize;
26389    pub const DEFAULT: Self = Self {
26390        initial_timestamp: 0_u64,
26391        target_system: 0_u8,
26392        target_component: 0_u8,
26393        secret_key: [0_u8; 32usize],
26394    };
26395    #[cfg(feature = "arbitrary")]
26396    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
26397        use arbitrary::{Arbitrary, Unstructured};
26398        let mut buf = [0u8; 1024];
26399        rng.fill_bytes(&mut buf);
26400        let mut unstructured = Unstructured::new(&buf);
26401        Self::arbitrary(&mut unstructured).unwrap_or_default()
26402    }
26403}
26404impl Default for SETUP_SIGNING_DATA {
26405    fn default() -> Self {
26406        Self::DEFAULT.clone()
26407    }
26408}
26409impl MessageData for SETUP_SIGNING_DATA {
26410    type Message = MavMessage;
26411    const ID: u32 = 256u32;
26412    const NAME: &'static str = "SETUP_SIGNING";
26413    const EXTRA_CRC: u8 = 71u8;
26414    const ENCODED_LEN: usize = 42usize;
26415    fn deser(
26416        _version: MavlinkVersion,
26417        __input: &[u8],
26418    ) -> Result<Self, ::mavlink_core::error::ParserError> {
26419        let avail_len = __input.len();
26420        let mut payload_buf = [0; Self::ENCODED_LEN];
26421        let mut buf = if avail_len < Self::ENCODED_LEN {
26422            payload_buf[0..avail_len].copy_from_slice(__input);
26423            Bytes::new(&payload_buf)
26424        } else {
26425            Bytes::new(__input)
26426        };
26427        let mut __struct = Self::default();
26428        __struct.initial_timestamp = buf.get_u64_le();
26429        __struct.target_system = buf.get_u8();
26430        __struct.target_component = buf.get_u8();
26431        for v in &mut __struct.secret_key {
26432            let val = buf.get_u8();
26433            *v = val;
26434        }
26435        Ok(__struct)
26436    }
26437    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
26438        let mut __tmp = BytesMut::new(bytes);
26439        #[allow(clippy::absurd_extreme_comparisons)]
26440        #[allow(unused_comparisons)]
26441        if __tmp.remaining() < Self::ENCODED_LEN {
26442            panic!(
26443                "buffer is too small (need {} bytes, but got {})",
26444                Self::ENCODED_LEN,
26445                __tmp.remaining(),
26446            )
26447        }
26448        __tmp.put_u64_le(self.initial_timestamp);
26449        __tmp.put_u8(self.target_system);
26450        __tmp.put_u8(self.target_component);
26451        for val in &self.secret_key {
26452            __tmp.put_u8(*val);
26453        }
26454        if matches!(version, MavlinkVersion::V2) {
26455            let len = __tmp.len();
26456            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
26457        } else {
26458            __tmp.len()
26459        }
26460    }
26461}
26462#[doc = "id: 139"]
26463#[doc = "Set the vehicle attitude and body angular rates."]
26464#[derive(Debug, Clone, PartialEq)]
26465#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26466#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26467pub struct SET_ACTUATOR_CONTROL_TARGET_DATA {
26468    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
26469    pub time_usec: u64,
26470    #[doc = "Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs."]
26471    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
26472    pub controls: [f32; 8],
26473    #[doc = "Actuator group. The \"_mlx\" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances."]
26474    pub group_mlx: u8,
26475    #[doc = "System ID"]
26476    pub target_system: u8,
26477    #[doc = "Component ID"]
26478    pub target_component: u8,
26479}
26480impl SET_ACTUATOR_CONTROL_TARGET_DATA {
26481    pub const ENCODED_LEN: usize = 43usize;
26482    pub const DEFAULT: Self = Self {
26483        time_usec: 0_u64,
26484        controls: [0.0_f32; 8usize],
26485        group_mlx: 0_u8,
26486        target_system: 0_u8,
26487        target_component: 0_u8,
26488    };
26489    #[cfg(feature = "arbitrary")]
26490    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
26491        use arbitrary::{Arbitrary, Unstructured};
26492        let mut buf = [0u8; 1024];
26493        rng.fill_bytes(&mut buf);
26494        let mut unstructured = Unstructured::new(&buf);
26495        Self::arbitrary(&mut unstructured).unwrap_or_default()
26496    }
26497}
26498impl Default for SET_ACTUATOR_CONTROL_TARGET_DATA {
26499    fn default() -> Self {
26500        Self::DEFAULT.clone()
26501    }
26502}
26503impl MessageData for SET_ACTUATOR_CONTROL_TARGET_DATA {
26504    type Message = MavMessage;
26505    const ID: u32 = 139u32;
26506    const NAME: &'static str = "SET_ACTUATOR_CONTROL_TARGET";
26507    const EXTRA_CRC: u8 = 168u8;
26508    const ENCODED_LEN: usize = 43usize;
26509    fn deser(
26510        _version: MavlinkVersion,
26511        __input: &[u8],
26512    ) -> Result<Self, ::mavlink_core::error::ParserError> {
26513        let avail_len = __input.len();
26514        let mut payload_buf = [0; Self::ENCODED_LEN];
26515        let mut buf = if avail_len < Self::ENCODED_LEN {
26516            payload_buf[0..avail_len].copy_from_slice(__input);
26517            Bytes::new(&payload_buf)
26518        } else {
26519            Bytes::new(__input)
26520        };
26521        let mut __struct = Self::default();
26522        __struct.time_usec = buf.get_u64_le();
26523        for v in &mut __struct.controls {
26524            let val = buf.get_f32_le();
26525            *v = val;
26526        }
26527        __struct.group_mlx = buf.get_u8();
26528        __struct.target_system = buf.get_u8();
26529        __struct.target_component = buf.get_u8();
26530        Ok(__struct)
26531    }
26532    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
26533        let mut __tmp = BytesMut::new(bytes);
26534        #[allow(clippy::absurd_extreme_comparisons)]
26535        #[allow(unused_comparisons)]
26536        if __tmp.remaining() < Self::ENCODED_LEN {
26537            panic!(
26538                "buffer is too small (need {} bytes, but got {})",
26539                Self::ENCODED_LEN,
26540                __tmp.remaining(),
26541            )
26542        }
26543        __tmp.put_u64_le(self.time_usec);
26544        for val in &self.controls {
26545            __tmp.put_f32_le(*val);
26546        }
26547        __tmp.put_u8(self.group_mlx);
26548        __tmp.put_u8(self.target_system);
26549        __tmp.put_u8(self.target_component);
26550        if matches!(version, MavlinkVersion::V2) {
26551            let len = __tmp.len();
26552            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
26553        } else {
26554            __tmp.len()
26555        }
26556    }
26557}
26558#[doc = "id: 82"]
26559#[doc = "Sets a desired vehicle attitude. Used by an external controller to command the vehicle (manual controller or other system)."]
26560#[derive(Debug, Clone, PartialEq)]
26561#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26562#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26563pub struct SET_ATTITUDE_TARGET_DATA {
26564    #[doc = "Timestamp (time since system boot)."]
26565    pub time_boot_ms: u32,
26566    #[doc = "Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) from MAV_FRAME_LOCAL_NED to MAV_FRAME_BODY_FRD"]
26567    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
26568    pub q: [f32; 4],
26569    #[doc = "Body roll rate"]
26570    pub body_roll_rate: f32,
26571    #[doc = "Body pitch rate"]
26572    pub body_pitch_rate: f32,
26573    #[doc = "Body yaw rate"]
26574    pub body_yaw_rate: f32,
26575    #[doc = "Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust)"]
26576    pub thrust: f32,
26577    #[doc = "System ID"]
26578    pub target_system: u8,
26579    #[doc = "Component ID"]
26580    pub target_component: u8,
26581    #[doc = "Bitmap to indicate which dimensions should be ignored by the vehicle."]
26582    pub type_mask: AttitudeTargetTypemask,
26583    #[doc = "3D thrust setpoint in the body NED frame, normalized to -1 .. 1"]
26584    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26585    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
26586    pub thrust_body: [f32; 3],
26587}
26588impl SET_ATTITUDE_TARGET_DATA {
26589    pub const ENCODED_LEN: usize = 51usize;
26590    pub const DEFAULT: Self = Self {
26591        time_boot_ms: 0_u32,
26592        q: [0.0_f32; 4usize],
26593        body_roll_rate: 0.0_f32,
26594        body_pitch_rate: 0.0_f32,
26595        body_yaw_rate: 0.0_f32,
26596        thrust: 0.0_f32,
26597        target_system: 0_u8,
26598        target_component: 0_u8,
26599        type_mask: AttitudeTargetTypemask::DEFAULT,
26600        thrust_body: [0.0_f32; 3usize],
26601    };
26602    #[cfg(feature = "arbitrary")]
26603    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
26604        use arbitrary::{Arbitrary, Unstructured};
26605        let mut buf = [0u8; 1024];
26606        rng.fill_bytes(&mut buf);
26607        let mut unstructured = Unstructured::new(&buf);
26608        Self::arbitrary(&mut unstructured).unwrap_or_default()
26609    }
26610}
26611impl Default for SET_ATTITUDE_TARGET_DATA {
26612    fn default() -> Self {
26613        Self::DEFAULT.clone()
26614    }
26615}
26616impl MessageData for SET_ATTITUDE_TARGET_DATA {
26617    type Message = MavMessage;
26618    const ID: u32 = 82u32;
26619    const NAME: &'static str = "SET_ATTITUDE_TARGET";
26620    const EXTRA_CRC: u8 = 49u8;
26621    const ENCODED_LEN: usize = 51usize;
26622    fn deser(
26623        _version: MavlinkVersion,
26624        __input: &[u8],
26625    ) -> Result<Self, ::mavlink_core::error::ParserError> {
26626        let avail_len = __input.len();
26627        let mut payload_buf = [0; Self::ENCODED_LEN];
26628        let mut buf = if avail_len < Self::ENCODED_LEN {
26629            payload_buf[0..avail_len].copy_from_slice(__input);
26630            Bytes::new(&payload_buf)
26631        } else {
26632            Bytes::new(__input)
26633        };
26634        let mut __struct = Self::default();
26635        __struct.time_boot_ms = buf.get_u32_le();
26636        for v in &mut __struct.q {
26637            let val = buf.get_f32_le();
26638            *v = val;
26639        }
26640        __struct.body_roll_rate = buf.get_f32_le();
26641        __struct.body_pitch_rate = buf.get_f32_le();
26642        __struct.body_yaw_rate = buf.get_f32_le();
26643        __struct.thrust = buf.get_f32_le();
26644        __struct.target_system = buf.get_u8();
26645        __struct.target_component = buf.get_u8();
26646        let tmp = buf.get_u8();
26647        __struct.type_mask = AttitudeTargetTypemask::from_bits(
26648            tmp & AttitudeTargetTypemask::all().bits(),
26649        )
26650        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
26651            flag_type: "AttitudeTargetTypemask",
26652            value: tmp as u32,
26653        })?;
26654        for v in &mut __struct.thrust_body {
26655            let val = buf.get_f32_le();
26656            *v = val;
26657        }
26658        Ok(__struct)
26659    }
26660    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
26661        let mut __tmp = BytesMut::new(bytes);
26662        #[allow(clippy::absurd_extreme_comparisons)]
26663        #[allow(unused_comparisons)]
26664        if __tmp.remaining() < Self::ENCODED_LEN {
26665            panic!(
26666                "buffer is too small (need {} bytes, but got {})",
26667                Self::ENCODED_LEN,
26668                __tmp.remaining(),
26669            )
26670        }
26671        __tmp.put_u32_le(self.time_boot_ms);
26672        for val in &self.q {
26673            __tmp.put_f32_le(*val);
26674        }
26675        __tmp.put_f32_le(self.body_roll_rate);
26676        __tmp.put_f32_le(self.body_pitch_rate);
26677        __tmp.put_f32_le(self.body_yaw_rate);
26678        __tmp.put_f32_le(self.thrust);
26679        __tmp.put_u8(self.target_system);
26680        __tmp.put_u8(self.target_component);
26681        __tmp.put_u8(self.type_mask.bits());
26682        for val in &self.thrust_body {
26683            __tmp.put_f32_le(*val);
26684        }
26685        if matches!(version, MavlinkVersion::V2) {
26686            let len = __tmp.len();
26687            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
26688        } else {
26689            __tmp.len()
26690        }
26691    }
26692}
26693#[deprecated = " See `MAV_CMD_SET_GLOBAL_ORIGIN` (Deprecated since 2025-04)"]
26694#[doc = "id: 48"]
26695#[doc = "Sets the GPS coordinates of the vehicle local origin (0,0,0) position. Vehicle should emit GPS_GLOBAL_ORIGIN irrespective of whether the origin is changed. This enables transform between the local coordinate frame and the global (GPS) coordinate frame, which may be necessary when (for example) indoor and outdoor settings are connected and the MAV should move from in- to outdoor."]
26696#[derive(Debug, Clone, PartialEq)]
26697#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26698#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26699pub struct SET_GPS_GLOBAL_ORIGIN_DATA {
26700    #[doc = "Latitude (WGS84)"]
26701    pub latitude: i32,
26702    #[doc = "Longitude (WGS84)"]
26703    pub longitude: i32,
26704    #[doc = "Altitude (MSL). Positive for up."]
26705    pub altitude: i32,
26706    #[doc = "System ID"]
26707    pub target_system: u8,
26708    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
26709    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26710    pub time_usec: u64,
26711}
26712impl SET_GPS_GLOBAL_ORIGIN_DATA {
26713    pub const ENCODED_LEN: usize = 21usize;
26714    pub const DEFAULT: Self = Self {
26715        latitude: 0_i32,
26716        longitude: 0_i32,
26717        altitude: 0_i32,
26718        target_system: 0_u8,
26719        time_usec: 0_u64,
26720    };
26721    #[cfg(feature = "arbitrary")]
26722    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
26723        use arbitrary::{Arbitrary, Unstructured};
26724        let mut buf = [0u8; 1024];
26725        rng.fill_bytes(&mut buf);
26726        let mut unstructured = Unstructured::new(&buf);
26727        Self::arbitrary(&mut unstructured).unwrap_or_default()
26728    }
26729}
26730impl Default for SET_GPS_GLOBAL_ORIGIN_DATA {
26731    fn default() -> Self {
26732        Self::DEFAULT.clone()
26733    }
26734}
26735impl MessageData for SET_GPS_GLOBAL_ORIGIN_DATA {
26736    type Message = MavMessage;
26737    const ID: u32 = 48u32;
26738    const NAME: &'static str = "SET_GPS_GLOBAL_ORIGIN";
26739    const EXTRA_CRC: u8 = 41u8;
26740    const ENCODED_LEN: usize = 21usize;
26741    fn deser(
26742        _version: MavlinkVersion,
26743        __input: &[u8],
26744    ) -> Result<Self, ::mavlink_core::error::ParserError> {
26745        let avail_len = __input.len();
26746        let mut payload_buf = [0; Self::ENCODED_LEN];
26747        let mut buf = if avail_len < Self::ENCODED_LEN {
26748            payload_buf[0..avail_len].copy_from_slice(__input);
26749            Bytes::new(&payload_buf)
26750        } else {
26751            Bytes::new(__input)
26752        };
26753        let mut __struct = Self::default();
26754        __struct.latitude = buf.get_i32_le();
26755        __struct.longitude = buf.get_i32_le();
26756        __struct.altitude = buf.get_i32_le();
26757        __struct.target_system = buf.get_u8();
26758        __struct.time_usec = buf.get_u64_le();
26759        Ok(__struct)
26760    }
26761    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
26762        let mut __tmp = BytesMut::new(bytes);
26763        #[allow(clippy::absurd_extreme_comparisons)]
26764        #[allow(unused_comparisons)]
26765        if __tmp.remaining() < Self::ENCODED_LEN {
26766            panic!(
26767                "buffer is too small (need {} bytes, but got {})",
26768                Self::ENCODED_LEN,
26769                __tmp.remaining(),
26770            )
26771        }
26772        __tmp.put_i32_le(self.latitude);
26773        __tmp.put_i32_le(self.longitude);
26774        __tmp.put_i32_le(self.altitude);
26775        __tmp.put_u8(self.target_system);
26776        __tmp.put_u64_le(self.time_usec);
26777        if matches!(version, MavlinkVersion::V2) {
26778            let len = __tmp.len();
26779            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
26780        } else {
26781            __tmp.len()
26782        }
26783    }
26784}
26785#[deprecated = "The command protocol version (MAV_CMD_DO_SET_HOME) allows a GCS to detect when setting the home position has failed. See `MAV_CMD_DO_SET_HOME` (Deprecated since 2022-02)"]
26786#[doc = "id: 243"]
26787#[doc = "Sets the home position. \tThe home position is the default position that the system will return to and land on.         The position is set automatically by the system during the takeoff (and may also be set using this message).         The global and local positions encode the position in the respective coordinate frames, while the q parameter encodes the orientation of the surface.         Under normal conditions it describes the heading and terrain slope, which can be used by the aircraft to adjust the approach.         The approach 3D vector describes the point to which the system should fly in normal flight mode and then perform a landing sequence along the vector.         Note: the current home position may be emitted in a HOME_POSITION message on request (using MAV_CMD_REQUEST_MESSAGE with param1=242)."]
26788#[derive(Debug, Clone, PartialEq)]
26789#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26790#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26791pub struct SET_HOME_POSITION_DATA {
26792    #[doc = "Latitude (WGS84)"]
26793    pub latitude: i32,
26794    #[doc = "Longitude (WGS84)"]
26795    pub longitude: i32,
26796    #[doc = "Altitude (MSL). Positive for up."]
26797    pub altitude: i32,
26798    #[doc = "Local X position of this position in the local coordinate frame (NED)"]
26799    pub x: f32,
26800    #[doc = "Local Y position of this position in the local coordinate frame (NED)"]
26801    pub y: f32,
26802    #[doc = "Local Z position of this position in the local coordinate frame (NED: positive \"down\")"]
26803    pub z: f32,
26804    #[doc = "World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground"]
26805    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
26806    pub q: [f32; 4],
26807    #[doc = "Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone."]
26808    pub approach_x: f32,
26809    #[doc = "Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone."]
26810    pub approach_y: f32,
26811    #[doc = "Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone."]
26812    pub approach_z: f32,
26813    #[doc = "System ID."]
26814    pub target_system: u8,
26815    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
26816    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
26817    pub time_usec: u64,
26818}
26819impl SET_HOME_POSITION_DATA {
26820    pub const ENCODED_LEN: usize = 61usize;
26821    pub const DEFAULT: Self = Self {
26822        latitude: 0_i32,
26823        longitude: 0_i32,
26824        altitude: 0_i32,
26825        x: 0.0_f32,
26826        y: 0.0_f32,
26827        z: 0.0_f32,
26828        q: [0.0_f32; 4usize],
26829        approach_x: 0.0_f32,
26830        approach_y: 0.0_f32,
26831        approach_z: 0.0_f32,
26832        target_system: 0_u8,
26833        time_usec: 0_u64,
26834    };
26835    #[cfg(feature = "arbitrary")]
26836    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
26837        use arbitrary::{Arbitrary, Unstructured};
26838        let mut buf = [0u8; 1024];
26839        rng.fill_bytes(&mut buf);
26840        let mut unstructured = Unstructured::new(&buf);
26841        Self::arbitrary(&mut unstructured).unwrap_or_default()
26842    }
26843}
26844impl Default for SET_HOME_POSITION_DATA {
26845    fn default() -> Self {
26846        Self::DEFAULT.clone()
26847    }
26848}
26849impl MessageData for SET_HOME_POSITION_DATA {
26850    type Message = MavMessage;
26851    const ID: u32 = 243u32;
26852    const NAME: &'static str = "SET_HOME_POSITION";
26853    const EXTRA_CRC: u8 = 85u8;
26854    const ENCODED_LEN: usize = 61usize;
26855    fn deser(
26856        _version: MavlinkVersion,
26857        __input: &[u8],
26858    ) -> Result<Self, ::mavlink_core::error::ParserError> {
26859        let avail_len = __input.len();
26860        let mut payload_buf = [0; Self::ENCODED_LEN];
26861        let mut buf = if avail_len < Self::ENCODED_LEN {
26862            payload_buf[0..avail_len].copy_from_slice(__input);
26863            Bytes::new(&payload_buf)
26864        } else {
26865            Bytes::new(__input)
26866        };
26867        let mut __struct = Self::default();
26868        __struct.latitude = buf.get_i32_le();
26869        __struct.longitude = buf.get_i32_le();
26870        __struct.altitude = buf.get_i32_le();
26871        __struct.x = buf.get_f32_le();
26872        __struct.y = buf.get_f32_le();
26873        __struct.z = buf.get_f32_le();
26874        for v in &mut __struct.q {
26875            let val = buf.get_f32_le();
26876            *v = val;
26877        }
26878        __struct.approach_x = buf.get_f32_le();
26879        __struct.approach_y = buf.get_f32_le();
26880        __struct.approach_z = buf.get_f32_le();
26881        __struct.target_system = buf.get_u8();
26882        __struct.time_usec = buf.get_u64_le();
26883        Ok(__struct)
26884    }
26885    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
26886        let mut __tmp = BytesMut::new(bytes);
26887        #[allow(clippy::absurd_extreme_comparisons)]
26888        #[allow(unused_comparisons)]
26889        if __tmp.remaining() < Self::ENCODED_LEN {
26890            panic!(
26891                "buffer is too small (need {} bytes, but got {})",
26892                Self::ENCODED_LEN,
26893                __tmp.remaining(),
26894            )
26895        }
26896        __tmp.put_i32_le(self.latitude);
26897        __tmp.put_i32_le(self.longitude);
26898        __tmp.put_i32_le(self.altitude);
26899        __tmp.put_f32_le(self.x);
26900        __tmp.put_f32_le(self.y);
26901        __tmp.put_f32_le(self.z);
26902        for val in &self.q {
26903            __tmp.put_f32_le(*val);
26904        }
26905        __tmp.put_f32_le(self.approach_x);
26906        __tmp.put_f32_le(self.approach_y);
26907        __tmp.put_f32_le(self.approach_z);
26908        __tmp.put_u8(self.target_system);
26909        __tmp.put_u64_le(self.time_usec);
26910        if matches!(version, MavlinkVersion::V2) {
26911            let len = __tmp.len();
26912            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
26913        } else {
26914            __tmp.len()
26915        }
26916    }
26917}
26918#[deprecated = "Use COMMAND_LONG with MAV_CMD_DO_SET_MODE instead. See `MAV_CMD_DO_SET_MODE` (Deprecated since 2015-12)"]
26919#[doc = "id: 11"]
26920#[doc = "Set the system mode, as defined by enum MAV_MODE. There is no target component id as the mode is by definition for the overall aircraft, not only for one component."]
26921#[derive(Debug, Clone, PartialEq)]
26922#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26923#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26924pub struct SET_MODE_DATA {
26925    #[doc = "The new autopilot-specific mode. This field can be ignored by an autopilot."]
26926    pub custom_mode: u32,
26927    #[doc = "The system setting the mode"]
26928    pub target_system: u8,
26929    #[doc = "The new base mode."]
26930    pub base_mode: MavMode,
26931}
26932impl SET_MODE_DATA {
26933    pub const ENCODED_LEN: usize = 6usize;
26934    pub const DEFAULT: Self = Self {
26935        custom_mode: 0_u32,
26936        target_system: 0_u8,
26937        base_mode: MavMode::DEFAULT,
26938    };
26939    #[cfg(feature = "arbitrary")]
26940    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
26941        use arbitrary::{Arbitrary, Unstructured};
26942        let mut buf = [0u8; 1024];
26943        rng.fill_bytes(&mut buf);
26944        let mut unstructured = Unstructured::new(&buf);
26945        Self::arbitrary(&mut unstructured).unwrap_or_default()
26946    }
26947}
26948impl Default for SET_MODE_DATA {
26949    fn default() -> Self {
26950        Self::DEFAULT.clone()
26951    }
26952}
26953impl MessageData for SET_MODE_DATA {
26954    type Message = MavMessage;
26955    const ID: u32 = 11u32;
26956    const NAME: &'static str = "SET_MODE";
26957    const EXTRA_CRC: u8 = 89u8;
26958    const ENCODED_LEN: usize = 6usize;
26959    fn deser(
26960        _version: MavlinkVersion,
26961        __input: &[u8],
26962    ) -> Result<Self, ::mavlink_core::error::ParserError> {
26963        let avail_len = __input.len();
26964        let mut payload_buf = [0; Self::ENCODED_LEN];
26965        let mut buf = if avail_len < Self::ENCODED_LEN {
26966            payload_buf[0..avail_len].copy_from_slice(__input);
26967            Bytes::new(&payload_buf)
26968        } else {
26969            Bytes::new(__input)
26970        };
26971        let mut __struct = Self::default();
26972        __struct.custom_mode = buf.get_u32_le();
26973        __struct.target_system = buf.get_u8();
26974        let tmp = buf.get_u8();
26975        __struct.base_mode =
26976            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
26977                enum_type: "MavMode",
26978                value: tmp as u32,
26979            })?;
26980        Ok(__struct)
26981    }
26982    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
26983        let mut __tmp = BytesMut::new(bytes);
26984        #[allow(clippy::absurd_extreme_comparisons)]
26985        #[allow(unused_comparisons)]
26986        if __tmp.remaining() < Self::ENCODED_LEN {
26987            panic!(
26988                "buffer is too small (need {} bytes, but got {})",
26989                Self::ENCODED_LEN,
26990                __tmp.remaining(),
26991            )
26992        }
26993        __tmp.put_u32_le(self.custom_mode);
26994        __tmp.put_u8(self.target_system);
26995        __tmp.put_u8(self.base_mode as u8);
26996        if matches!(version, MavlinkVersion::V2) {
26997            let len = __tmp.len();
26998            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
26999        } else {
27000            __tmp.len()
27001        }
27002    }
27003}
27004#[doc = "id: 86"]
27005#[doc = "Sets a desired vehicle position, velocity, and/or acceleration in a global coordinate system (WGS84). Used by an external controller to command the vehicle (manual controller or other system)."]
27006#[derive(Debug, Clone, PartialEq)]
27007#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
27008#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27009pub struct SET_POSITION_TARGET_GLOBAL_INT_DATA {
27010    #[doc = "Timestamp (time since system boot). The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency."]
27011    pub time_boot_ms: u32,
27012    #[doc = "Latitude in WGS84 frame"]
27013    pub lat_int: i32,
27014    #[doc = "Longitude in WGS84 frame"]
27015    pub lon_int: i32,
27016    #[doc = "Altitude (MSL, Relative to home, or AGL - depending on frame)"]
27017    pub alt: f32,
27018    #[doc = "X velocity in NED frame"]
27019    pub vx: f32,
27020    #[doc = "Y velocity in NED frame"]
27021    pub vy: f32,
27022    #[doc = "Z velocity in NED frame"]
27023    pub vz: f32,
27024    #[doc = "X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N"]
27025    pub afx: f32,
27026    #[doc = "Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N"]
27027    pub afy: f32,
27028    #[doc = "Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N"]
27029    pub afz: f32,
27030    #[doc = "yaw setpoint"]
27031    pub yaw: f32,
27032    #[doc = "yaw rate setpoint"]
27033    pub yaw_rate: f32,
27034    #[doc = "Bitmap to indicate which dimensions should be ignored by the vehicle."]
27035    pub type_mask: PositionTargetTypemask,
27036    #[doc = "System ID"]
27037    pub target_system: u8,
27038    #[doc = "Component ID"]
27039    pub target_component: u8,
27040    #[doc = "Valid options are: MAV_FRAME_GLOBAL = 0, MAV_FRAME_GLOBAL_RELATIVE_ALT = 3, MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 (MAV_FRAME_GLOBAL_INT, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT are allowed synonyms, but have been deprecated)"]
27041    pub coordinate_frame: MavFrame,
27042}
27043impl SET_POSITION_TARGET_GLOBAL_INT_DATA {
27044    pub const ENCODED_LEN: usize = 53usize;
27045    pub const DEFAULT: Self = Self {
27046        time_boot_ms: 0_u32,
27047        lat_int: 0_i32,
27048        lon_int: 0_i32,
27049        alt: 0.0_f32,
27050        vx: 0.0_f32,
27051        vy: 0.0_f32,
27052        vz: 0.0_f32,
27053        afx: 0.0_f32,
27054        afy: 0.0_f32,
27055        afz: 0.0_f32,
27056        yaw: 0.0_f32,
27057        yaw_rate: 0.0_f32,
27058        type_mask: PositionTargetTypemask::DEFAULT,
27059        target_system: 0_u8,
27060        target_component: 0_u8,
27061        coordinate_frame: MavFrame::DEFAULT,
27062    };
27063    #[cfg(feature = "arbitrary")]
27064    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
27065        use arbitrary::{Arbitrary, Unstructured};
27066        let mut buf = [0u8; 1024];
27067        rng.fill_bytes(&mut buf);
27068        let mut unstructured = Unstructured::new(&buf);
27069        Self::arbitrary(&mut unstructured).unwrap_or_default()
27070    }
27071}
27072impl Default for SET_POSITION_TARGET_GLOBAL_INT_DATA {
27073    fn default() -> Self {
27074        Self::DEFAULT.clone()
27075    }
27076}
27077impl MessageData for SET_POSITION_TARGET_GLOBAL_INT_DATA {
27078    type Message = MavMessage;
27079    const ID: u32 = 86u32;
27080    const NAME: &'static str = "SET_POSITION_TARGET_GLOBAL_INT";
27081    const EXTRA_CRC: u8 = 5u8;
27082    const ENCODED_LEN: usize = 53usize;
27083    fn deser(
27084        _version: MavlinkVersion,
27085        __input: &[u8],
27086    ) -> Result<Self, ::mavlink_core::error::ParserError> {
27087        let avail_len = __input.len();
27088        let mut payload_buf = [0; Self::ENCODED_LEN];
27089        let mut buf = if avail_len < Self::ENCODED_LEN {
27090            payload_buf[0..avail_len].copy_from_slice(__input);
27091            Bytes::new(&payload_buf)
27092        } else {
27093            Bytes::new(__input)
27094        };
27095        let mut __struct = Self::default();
27096        __struct.time_boot_ms = buf.get_u32_le();
27097        __struct.lat_int = buf.get_i32_le();
27098        __struct.lon_int = buf.get_i32_le();
27099        __struct.alt = buf.get_f32_le();
27100        __struct.vx = buf.get_f32_le();
27101        __struct.vy = buf.get_f32_le();
27102        __struct.vz = buf.get_f32_le();
27103        __struct.afx = buf.get_f32_le();
27104        __struct.afy = buf.get_f32_le();
27105        __struct.afz = buf.get_f32_le();
27106        __struct.yaw = buf.get_f32_le();
27107        __struct.yaw_rate = buf.get_f32_le();
27108        let tmp = buf.get_u16_le();
27109        __struct.type_mask = PositionTargetTypemask::from_bits(
27110            tmp & PositionTargetTypemask::all().bits(),
27111        )
27112        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
27113            flag_type: "PositionTargetTypemask",
27114            value: tmp as u32,
27115        })?;
27116        __struct.target_system = buf.get_u8();
27117        __struct.target_component = buf.get_u8();
27118        let tmp = buf.get_u8();
27119        __struct.coordinate_frame =
27120            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
27121                enum_type: "MavFrame",
27122                value: tmp as u32,
27123            })?;
27124        Ok(__struct)
27125    }
27126    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
27127        let mut __tmp = BytesMut::new(bytes);
27128        #[allow(clippy::absurd_extreme_comparisons)]
27129        #[allow(unused_comparisons)]
27130        if __tmp.remaining() < Self::ENCODED_LEN {
27131            panic!(
27132                "buffer is too small (need {} bytes, but got {})",
27133                Self::ENCODED_LEN,
27134                __tmp.remaining(),
27135            )
27136        }
27137        __tmp.put_u32_le(self.time_boot_ms);
27138        __tmp.put_i32_le(self.lat_int);
27139        __tmp.put_i32_le(self.lon_int);
27140        __tmp.put_f32_le(self.alt);
27141        __tmp.put_f32_le(self.vx);
27142        __tmp.put_f32_le(self.vy);
27143        __tmp.put_f32_le(self.vz);
27144        __tmp.put_f32_le(self.afx);
27145        __tmp.put_f32_le(self.afy);
27146        __tmp.put_f32_le(self.afz);
27147        __tmp.put_f32_le(self.yaw);
27148        __tmp.put_f32_le(self.yaw_rate);
27149        __tmp.put_u16_le(self.type_mask.bits());
27150        __tmp.put_u8(self.target_system);
27151        __tmp.put_u8(self.target_component);
27152        __tmp.put_u8(self.coordinate_frame as u8);
27153        if matches!(version, MavlinkVersion::V2) {
27154            let len = __tmp.len();
27155            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
27156        } else {
27157            __tmp.len()
27158        }
27159    }
27160}
27161#[doc = "id: 84"]
27162#[doc = "Sets a desired vehicle position in a local north-east-down coordinate frame. Used by an external controller to command the vehicle (manual controller or other system)."]
27163#[derive(Debug, Clone, PartialEq)]
27164#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
27165#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27166pub struct SET_POSITION_TARGET_LOCAL_NED_DATA {
27167    #[doc = "Timestamp (time since system boot)."]
27168    pub time_boot_ms: u32,
27169    #[doc = "X Position in NED frame"]
27170    pub x: f32,
27171    #[doc = "Y Position in NED frame"]
27172    pub y: f32,
27173    #[doc = "Z Position in NED frame (note, altitude is negative in NED)"]
27174    pub z: f32,
27175    #[doc = "X velocity in NED frame"]
27176    pub vx: f32,
27177    #[doc = "Y velocity in NED frame"]
27178    pub vy: f32,
27179    #[doc = "Z velocity in NED frame"]
27180    pub vz: f32,
27181    #[doc = "X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N"]
27182    pub afx: f32,
27183    #[doc = "Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N"]
27184    pub afy: f32,
27185    #[doc = "Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N"]
27186    pub afz: f32,
27187    #[doc = "yaw setpoint"]
27188    pub yaw: f32,
27189    #[doc = "yaw rate setpoint"]
27190    pub yaw_rate: f32,
27191    #[doc = "Bitmap to indicate which dimensions should be ignored by the vehicle."]
27192    pub type_mask: PositionTargetTypemask,
27193    #[doc = "System ID"]
27194    pub target_system: u8,
27195    #[doc = "Component ID"]
27196    pub target_component: u8,
27197    #[doc = "Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9"]
27198    pub coordinate_frame: MavFrame,
27199}
27200impl SET_POSITION_TARGET_LOCAL_NED_DATA {
27201    pub const ENCODED_LEN: usize = 53usize;
27202    pub const DEFAULT: Self = Self {
27203        time_boot_ms: 0_u32,
27204        x: 0.0_f32,
27205        y: 0.0_f32,
27206        z: 0.0_f32,
27207        vx: 0.0_f32,
27208        vy: 0.0_f32,
27209        vz: 0.0_f32,
27210        afx: 0.0_f32,
27211        afy: 0.0_f32,
27212        afz: 0.0_f32,
27213        yaw: 0.0_f32,
27214        yaw_rate: 0.0_f32,
27215        type_mask: PositionTargetTypemask::DEFAULT,
27216        target_system: 0_u8,
27217        target_component: 0_u8,
27218        coordinate_frame: MavFrame::DEFAULT,
27219    };
27220    #[cfg(feature = "arbitrary")]
27221    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
27222        use arbitrary::{Arbitrary, Unstructured};
27223        let mut buf = [0u8; 1024];
27224        rng.fill_bytes(&mut buf);
27225        let mut unstructured = Unstructured::new(&buf);
27226        Self::arbitrary(&mut unstructured).unwrap_or_default()
27227    }
27228}
27229impl Default for SET_POSITION_TARGET_LOCAL_NED_DATA {
27230    fn default() -> Self {
27231        Self::DEFAULT.clone()
27232    }
27233}
27234impl MessageData for SET_POSITION_TARGET_LOCAL_NED_DATA {
27235    type Message = MavMessage;
27236    const ID: u32 = 84u32;
27237    const NAME: &'static str = "SET_POSITION_TARGET_LOCAL_NED";
27238    const EXTRA_CRC: u8 = 143u8;
27239    const ENCODED_LEN: usize = 53usize;
27240    fn deser(
27241        _version: MavlinkVersion,
27242        __input: &[u8],
27243    ) -> Result<Self, ::mavlink_core::error::ParserError> {
27244        let avail_len = __input.len();
27245        let mut payload_buf = [0; Self::ENCODED_LEN];
27246        let mut buf = if avail_len < Self::ENCODED_LEN {
27247            payload_buf[0..avail_len].copy_from_slice(__input);
27248            Bytes::new(&payload_buf)
27249        } else {
27250            Bytes::new(__input)
27251        };
27252        let mut __struct = Self::default();
27253        __struct.time_boot_ms = buf.get_u32_le();
27254        __struct.x = buf.get_f32_le();
27255        __struct.y = buf.get_f32_le();
27256        __struct.z = buf.get_f32_le();
27257        __struct.vx = buf.get_f32_le();
27258        __struct.vy = buf.get_f32_le();
27259        __struct.vz = buf.get_f32_le();
27260        __struct.afx = buf.get_f32_le();
27261        __struct.afy = buf.get_f32_le();
27262        __struct.afz = buf.get_f32_le();
27263        __struct.yaw = buf.get_f32_le();
27264        __struct.yaw_rate = buf.get_f32_le();
27265        let tmp = buf.get_u16_le();
27266        __struct.type_mask = PositionTargetTypemask::from_bits(
27267            tmp & PositionTargetTypemask::all().bits(),
27268        )
27269        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
27270            flag_type: "PositionTargetTypemask",
27271            value: tmp as u32,
27272        })?;
27273        __struct.target_system = buf.get_u8();
27274        __struct.target_component = buf.get_u8();
27275        let tmp = buf.get_u8();
27276        __struct.coordinate_frame =
27277            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
27278                enum_type: "MavFrame",
27279                value: tmp as u32,
27280            })?;
27281        Ok(__struct)
27282    }
27283    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
27284        let mut __tmp = BytesMut::new(bytes);
27285        #[allow(clippy::absurd_extreme_comparisons)]
27286        #[allow(unused_comparisons)]
27287        if __tmp.remaining() < Self::ENCODED_LEN {
27288            panic!(
27289                "buffer is too small (need {} bytes, but got {})",
27290                Self::ENCODED_LEN,
27291                __tmp.remaining(),
27292            )
27293        }
27294        __tmp.put_u32_le(self.time_boot_ms);
27295        __tmp.put_f32_le(self.x);
27296        __tmp.put_f32_le(self.y);
27297        __tmp.put_f32_le(self.z);
27298        __tmp.put_f32_le(self.vx);
27299        __tmp.put_f32_le(self.vy);
27300        __tmp.put_f32_le(self.vz);
27301        __tmp.put_f32_le(self.afx);
27302        __tmp.put_f32_le(self.afy);
27303        __tmp.put_f32_le(self.afz);
27304        __tmp.put_f32_le(self.yaw);
27305        __tmp.put_f32_le(self.yaw_rate);
27306        __tmp.put_u16_le(self.type_mask.bits());
27307        __tmp.put_u8(self.target_system);
27308        __tmp.put_u8(self.target_component);
27309        __tmp.put_u8(self.coordinate_frame as u8);
27310        if matches!(version, MavlinkVersion::V2) {
27311            let len = __tmp.len();
27312            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
27313        } else {
27314            __tmp.len()
27315        }
27316    }
27317}
27318#[doc = "id: 108"]
27319#[doc = "Status of simulation environment, if used."]
27320#[derive(Debug, Clone, PartialEq)]
27321#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
27322#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27323pub struct SIM_STATE_DATA {
27324    #[doc = "True attitude quaternion component 1, w (1 in null-rotation)"]
27325    pub q1: f32,
27326    #[doc = "True attitude quaternion component 2, x (0 in null-rotation)"]
27327    pub q2: f32,
27328    #[doc = "True attitude quaternion component 3, y (0 in null-rotation)"]
27329    pub q3: f32,
27330    #[doc = "True attitude quaternion component 4, z (0 in null-rotation)"]
27331    pub q4: f32,
27332    #[doc = "Attitude roll expressed as Euler angles, not recommended except for human-readable outputs"]
27333    pub roll: f32,
27334    #[doc = "Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs"]
27335    pub pitch: f32,
27336    #[doc = "Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs"]
27337    pub yaw: f32,
27338    #[doc = "X acceleration"]
27339    pub xacc: f32,
27340    #[doc = "Y acceleration"]
27341    pub yacc: f32,
27342    #[doc = "Z acceleration"]
27343    pub zacc: f32,
27344    #[doc = "Angular speed around X axis"]
27345    pub xgyro: f32,
27346    #[doc = "Angular speed around Y axis"]
27347    pub ygyro: f32,
27348    #[doc = "Angular speed around Z axis"]
27349    pub zgyro: f32,
27350    #[doc = "Latitude (lower precision). Both this and the lat_int field should be set."]
27351    pub lat: f32,
27352    #[doc = "Longitude (lower precision). Both this and the lon_int field should be set."]
27353    pub lon: f32,
27354    #[doc = "Altitude"]
27355    pub alt: f32,
27356    #[doc = "Horizontal position standard deviation"]
27357    pub std_dev_horz: f32,
27358    #[doc = "Vertical position standard deviation"]
27359    pub std_dev_vert: f32,
27360    #[doc = "True velocity in north direction in earth-fixed NED frame"]
27361    pub vn: f32,
27362    #[doc = "True velocity in east direction in earth-fixed NED frame"]
27363    pub ve: f32,
27364    #[doc = "True velocity in down direction in earth-fixed NED frame"]
27365    pub vd: f32,
27366    #[doc = "Latitude (higher precision). If 0, recipients should use the lat field value (otherwise this field is preferred)."]
27367    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
27368    pub lat_int: i32,
27369    #[doc = "Longitude (higher precision). If 0, recipients should use the lon field value (otherwise this field is preferred)."]
27370    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
27371    pub lon_int: i32,
27372}
27373impl SIM_STATE_DATA {
27374    pub const ENCODED_LEN: usize = 92usize;
27375    pub const DEFAULT: Self = Self {
27376        q1: 0.0_f32,
27377        q2: 0.0_f32,
27378        q3: 0.0_f32,
27379        q4: 0.0_f32,
27380        roll: 0.0_f32,
27381        pitch: 0.0_f32,
27382        yaw: 0.0_f32,
27383        xacc: 0.0_f32,
27384        yacc: 0.0_f32,
27385        zacc: 0.0_f32,
27386        xgyro: 0.0_f32,
27387        ygyro: 0.0_f32,
27388        zgyro: 0.0_f32,
27389        lat: 0.0_f32,
27390        lon: 0.0_f32,
27391        alt: 0.0_f32,
27392        std_dev_horz: 0.0_f32,
27393        std_dev_vert: 0.0_f32,
27394        vn: 0.0_f32,
27395        ve: 0.0_f32,
27396        vd: 0.0_f32,
27397        lat_int: 0_i32,
27398        lon_int: 0_i32,
27399    };
27400    #[cfg(feature = "arbitrary")]
27401    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
27402        use arbitrary::{Arbitrary, Unstructured};
27403        let mut buf = [0u8; 1024];
27404        rng.fill_bytes(&mut buf);
27405        let mut unstructured = Unstructured::new(&buf);
27406        Self::arbitrary(&mut unstructured).unwrap_or_default()
27407    }
27408}
27409impl Default for SIM_STATE_DATA {
27410    fn default() -> Self {
27411        Self::DEFAULT.clone()
27412    }
27413}
27414impl MessageData for SIM_STATE_DATA {
27415    type Message = MavMessage;
27416    const ID: u32 = 108u32;
27417    const NAME: &'static str = "SIM_STATE";
27418    const EXTRA_CRC: u8 = 32u8;
27419    const ENCODED_LEN: usize = 92usize;
27420    fn deser(
27421        _version: MavlinkVersion,
27422        __input: &[u8],
27423    ) -> Result<Self, ::mavlink_core::error::ParserError> {
27424        let avail_len = __input.len();
27425        let mut payload_buf = [0; Self::ENCODED_LEN];
27426        let mut buf = if avail_len < Self::ENCODED_LEN {
27427            payload_buf[0..avail_len].copy_from_slice(__input);
27428            Bytes::new(&payload_buf)
27429        } else {
27430            Bytes::new(__input)
27431        };
27432        let mut __struct = Self::default();
27433        __struct.q1 = buf.get_f32_le();
27434        __struct.q2 = buf.get_f32_le();
27435        __struct.q3 = buf.get_f32_le();
27436        __struct.q4 = buf.get_f32_le();
27437        __struct.roll = buf.get_f32_le();
27438        __struct.pitch = buf.get_f32_le();
27439        __struct.yaw = buf.get_f32_le();
27440        __struct.xacc = buf.get_f32_le();
27441        __struct.yacc = buf.get_f32_le();
27442        __struct.zacc = buf.get_f32_le();
27443        __struct.xgyro = buf.get_f32_le();
27444        __struct.ygyro = buf.get_f32_le();
27445        __struct.zgyro = buf.get_f32_le();
27446        __struct.lat = buf.get_f32_le();
27447        __struct.lon = buf.get_f32_le();
27448        __struct.alt = buf.get_f32_le();
27449        __struct.std_dev_horz = buf.get_f32_le();
27450        __struct.std_dev_vert = buf.get_f32_le();
27451        __struct.vn = buf.get_f32_le();
27452        __struct.ve = buf.get_f32_le();
27453        __struct.vd = buf.get_f32_le();
27454        __struct.lat_int = buf.get_i32_le();
27455        __struct.lon_int = buf.get_i32_le();
27456        Ok(__struct)
27457    }
27458    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
27459        let mut __tmp = BytesMut::new(bytes);
27460        #[allow(clippy::absurd_extreme_comparisons)]
27461        #[allow(unused_comparisons)]
27462        if __tmp.remaining() < Self::ENCODED_LEN {
27463            panic!(
27464                "buffer is too small (need {} bytes, but got {})",
27465                Self::ENCODED_LEN,
27466                __tmp.remaining(),
27467            )
27468        }
27469        __tmp.put_f32_le(self.q1);
27470        __tmp.put_f32_le(self.q2);
27471        __tmp.put_f32_le(self.q3);
27472        __tmp.put_f32_le(self.q4);
27473        __tmp.put_f32_le(self.roll);
27474        __tmp.put_f32_le(self.pitch);
27475        __tmp.put_f32_le(self.yaw);
27476        __tmp.put_f32_le(self.xacc);
27477        __tmp.put_f32_le(self.yacc);
27478        __tmp.put_f32_le(self.zacc);
27479        __tmp.put_f32_le(self.xgyro);
27480        __tmp.put_f32_le(self.ygyro);
27481        __tmp.put_f32_le(self.zgyro);
27482        __tmp.put_f32_le(self.lat);
27483        __tmp.put_f32_le(self.lon);
27484        __tmp.put_f32_le(self.alt);
27485        __tmp.put_f32_le(self.std_dev_horz);
27486        __tmp.put_f32_le(self.std_dev_vert);
27487        __tmp.put_f32_le(self.vn);
27488        __tmp.put_f32_le(self.ve);
27489        __tmp.put_f32_le(self.vd);
27490        __tmp.put_i32_le(self.lat_int);
27491        __tmp.put_i32_le(self.lon_int);
27492        if matches!(version, MavlinkVersion::V2) {
27493            let len = __tmp.len();
27494            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
27495        } else {
27496            __tmp.len()
27497        }
27498    }
27499}
27500#[deprecated = "The BATTERY_INFO message is better aligned with UAVCAN messages, and in any case is useful even if a battery is not \"smart\". See `BATTERY_INFO` (Deprecated since 2024-02)"]
27501#[doc = "id: 370"]
27502#[doc = "Smart Battery information (static/infrequent update). Use for updates from: smart battery to flight stack, flight stack to GCS. Use BATTERY_STATUS for the frequent battery updates."]
27503#[derive(Debug, Clone, PartialEq)]
27504#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
27505#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27506pub struct SMART_BATTERY_INFO_DATA {
27507    #[doc = "Capacity when full according to manufacturer, -1: field not provided."]
27508    pub capacity_full_specification: i32,
27509    #[doc = "Capacity when full (accounting for battery degradation), -1: field not provided."]
27510    pub capacity_full: i32,
27511    #[doc = "Charge/discharge cycle count. UINT16_MAX: field not provided."]
27512    pub cycle_count: u16,
27513    #[doc = "Battery weight. 0: field not provided."]
27514    pub weight: u16,
27515    #[doc = "Minimum per-cell voltage when discharging. If not supplied set to UINT16_MAX value."]
27516    pub discharge_minimum_voltage: u16,
27517    #[doc = "Minimum per-cell voltage when charging. If not supplied set to UINT16_MAX value."]
27518    pub charging_minimum_voltage: u16,
27519    #[doc = "Minimum per-cell voltage when resting. If not supplied set to UINT16_MAX value."]
27520    pub resting_minimum_voltage: u16,
27521    #[doc = "Battery ID"]
27522    pub id: u8,
27523    #[doc = "Function of the battery"]
27524    pub battery_function: MavBatteryFunction,
27525    #[doc = "Type (chemistry) of the battery"]
27526    pub mavtype: MavBatteryType,
27527    #[doc = "Serial number in ASCII characters, 0 terminated. All 0: field not provided."]
27528    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
27529    pub serial_number: [u8; 16],
27530    #[doc = "Static device name in ASCII characters, 0 terminated. All 0: field not provided. Encode as manufacturer name then product name separated using an underscore."]
27531    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
27532    pub device_name: [u8; 50],
27533    #[doc = "Maximum per-cell voltage when charged. 0: field not provided."]
27534    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
27535    pub charging_maximum_voltage: u16,
27536    #[doc = "Number of battery cells in series. 0: field not provided."]
27537    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
27538    pub cells_in_series: u8,
27539    #[doc = "Maximum pack discharge current. 0: field not provided."]
27540    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
27541    pub discharge_maximum_current: u32,
27542    #[doc = "Maximum pack discharge burst current. 0: field not provided."]
27543    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
27544    pub discharge_maximum_burst_current: u32,
27545    #[doc = "Manufacture date (DD/MM/YYYY) in ASCII characters, 0 terminated. All 0: field not provided."]
27546    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
27547    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
27548    pub manufacture_date: [u8; 11],
27549}
27550impl SMART_BATTERY_INFO_DATA {
27551    pub const ENCODED_LEN: usize = 109usize;
27552    pub const DEFAULT: Self = Self {
27553        capacity_full_specification: 0_i32,
27554        capacity_full: 0_i32,
27555        cycle_count: 0_u16,
27556        weight: 0_u16,
27557        discharge_minimum_voltage: 0_u16,
27558        charging_minimum_voltage: 0_u16,
27559        resting_minimum_voltage: 0_u16,
27560        id: 0_u8,
27561        battery_function: MavBatteryFunction::DEFAULT,
27562        mavtype: MavBatteryType::DEFAULT,
27563        serial_number: [0_u8; 16usize],
27564        device_name: [0_u8; 50usize],
27565        charging_maximum_voltage: 0_u16,
27566        cells_in_series: 0_u8,
27567        discharge_maximum_current: 0_u32,
27568        discharge_maximum_burst_current: 0_u32,
27569        manufacture_date: [0_u8; 11usize],
27570    };
27571    #[cfg(feature = "arbitrary")]
27572    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
27573        use arbitrary::{Arbitrary, Unstructured};
27574        let mut buf = [0u8; 1024];
27575        rng.fill_bytes(&mut buf);
27576        let mut unstructured = Unstructured::new(&buf);
27577        Self::arbitrary(&mut unstructured).unwrap_or_default()
27578    }
27579}
27580impl Default for SMART_BATTERY_INFO_DATA {
27581    fn default() -> Self {
27582        Self::DEFAULT.clone()
27583    }
27584}
27585impl MessageData for SMART_BATTERY_INFO_DATA {
27586    type Message = MavMessage;
27587    const ID: u32 = 370u32;
27588    const NAME: &'static str = "SMART_BATTERY_INFO";
27589    const EXTRA_CRC: u8 = 75u8;
27590    const ENCODED_LEN: usize = 109usize;
27591    fn deser(
27592        _version: MavlinkVersion,
27593        __input: &[u8],
27594    ) -> Result<Self, ::mavlink_core::error::ParserError> {
27595        let avail_len = __input.len();
27596        let mut payload_buf = [0; Self::ENCODED_LEN];
27597        let mut buf = if avail_len < Self::ENCODED_LEN {
27598            payload_buf[0..avail_len].copy_from_slice(__input);
27599            Bytes::new(&payload_buf)
27600        } else {
27601            Bytes::new(__input)
27602        };
27603        let mut __struct = Self::default();
27604        __struct.capacity_full_specification = buf.get_i32_le();
27605        __struct.capacity_full = buf.get_i32_le();
27606        __struct.cycle_count = buf.get_u16_le();
27607        __struct.weight = buf.get_u16_le();
27608        __struct.discharge_minimum_voltage = buf.get_u16_le();
27609        __struct.charging_minimum_voltage = buf.get_u16_le();
27610        __struct.resting_minimum_voltage = buf.get_u16_le();
27611        __struct.id = buf.get_u8();
27612        let tmp = buf.get_u8();
27613        __struct.battery_function =
27614            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
27615                enum_type: "MavBatteryFunction",
27616                value: tmp as u32,
27617            })?;
27618        let tmp = buf.get_u8();
27619        __struct.mavtype =
27620            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
27621                enum_type: "MavBatteryType",
27622                value: tmp as u32,
27623            })?;
27624        for v in &mut __struct.serial_number {
27625            let val = buf.get_u8();
27626            *v = val;
27627        }
27628        for v in &mut __struct.device_name {
27629            let val = buf.get_u8();
27630            *v = val;
27631        }
27632        __struct.charging_maximum_voltage = buf.get_u16_le();
27633        __struct.cells_in_series = buf.get_u8();
27634        __struct.discharge_maximum_current = buf.get_u32_le();
27635        __struct.discharge_maximum_burst_current = buf.get_u32_le();
27636        for v in &mut __struct.manufacture_date {
27637            let val = buf.get_u8();
27638            *v = val;
27639        }
27640        Ok(__struct)
27641    }
27642    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
27643        let mut __tmp = BytesMut::new(bytes);
27644        #[allow(clippy::absurd_extreme_comparisons)]
27645        #[allow(unused_comparisons)]
27646        if __tmp.remaining() < Self::ENCODED_LEN {
27647            panic!(
27648                "buffer is too small (need {} bytes, but got {})",
27649                Self::ENCODED_LEN,
27650                __tmp.remaining(),
27651            )
27652        }
27653        __tmp.put_i32_le(self.capacity_full_specification);
27654        __tmp.put_i32_le(self.capacity_full);
27655        __tmp.put_u16_le(self.cycle_count);
27656        __tmp.put_u16_le(self.weight);
27657        __tmp.put_u16_le(self.discharge_minimum_voltage);
27658        __tmp.put_u16_le(self.charging_minimum_voltage);
27659        __tmp.put_u16_le(self.resting_minimum_voltage);
27660        __tmp.put_u8(self.id);
27661        __tmp.put_u8(self.battery_function as u8);
27662        __tmp.put_u8(self.mavtype as u8);
27663        for val in &self.serial_number {
27664            __tmp.put_u8(*val);
27665        }
27666        for val in &self.device_name {
27667            __tmp.put_u8(*val);
27668        }
27669        __tmp.put_u16_le(self.charging_maximum_voltage);
27670        __tmp.put_u8(self.cells_in_series);
27671        __tmp.put_u32_le(self.discharge_maximum_current);
27672        __tmp.put_u32_le(self.discharge_maximum_burst_current);
27673        for val in &self.manufacture_date {
27674            __tmp.put_u8(*val);
27675        }
27676        if matches!(version, MavlinkVersion::V2) {
27677            let len = __tmp.len();
27678            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
27679        } else {
27680            __tmp.len()
27681        }
27682    }
27683}
27684#[doc = "id: 253"]
27685#[doc = "Status text message. These messages are printed in yellow in the COMM console of QGroundControl. WARNING: They consume quite some bandwidth, so use only for important status and error messages. If implemented wisely, these messages are buffered on the MCU and sent only at a limited rate (e.g. 10 Hz)."]
27686#[derive(Debug, Clone, PartialEq)]
27687#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
27688#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27689pub struct STATUSTEXT_DATA {
27690    #[doc = "Severity of status. Relies on the definitions within RFC-5424."]
27691    pub severity: MavSeverity,
27692    #[doc = "Status text message, without null termination character"]
27693    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
27694    pub text: [u8; 50],
27695    #[doc = "Unique (opaque) identifier for this statustext message.  May be used to reassemble a logical long-statustext message from a sequence of chunks.  A value of zero indicates this is the only chunk in the sequence and the message can be emitted immediately."]
27696    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
27697    pub id: u16,
27698    #[doc = "This chunk's sequence number; indexing is from zero.  Any null character in the text field is taken to mean this was the last chunk."]
27699    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
27700    pub chunk_seq: u8,
27701}
27702impl STATUSTEXT_DATA {
27703    pub const ENCODED_LEN: usize = 54usize;
27704    pub const DEFAULT: Self = Self {
27705        severity: MavSeverity::DEFAULT,
27706        text: [0_u8; 50usize],
27707        id: 0_u16,
27708        chunk_seq: 0_u8,
27709    };
27710    #[cfg(feature = "arbitrary")]
27711    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
27712        use arbitrary::{Arbitrary, Unstructured};
27713        let mut buf = [0u8; 1024];
27714        rng.fill_bytes(&mut buf);
27715        let mut unstructured = Unstructured::new(&buf);
27716        Self::arbitrary(&mut unstructured).unwrap_or_default()
27717    }
27718}
27719impl Default for STATUSTEXT_DATA {
27720    fn default() -> Self {
27721        Self::DEFAULT.clone()
27722    }
27723}
27724impl MessageData for STATUSTEXT_DATA {
27725    type Message = MavMessage;
27726    const ID: u32 = 253u32;
27727    const NAME: &'static str = "STATUSTEXT";
27728    const EXTRA_CRC: u8 = 83u8;
27729    const ENCODED_LEN: usize = 54usize;
27730    fn deser(
27731        _version: MavlinkVersion,
27732        __input: &[u8],
27733    ) -> Result<Self, ::mavlink_core::error::ParserError> {
27734        let avail_len = __input.len();
27735        let mut payload_buf = [0; Self::ENCODED_LEN];
27736        let mut buf = if avail_len < Self::ENCODED_LEN {
27737            payload_buf[0..avail_len].copy_from_slice(__input);
27738            Bytes::new(&payload_buf)
27739        } else {
27740            Bytes::new(__input)
27741        };
27742        let mut __struct = Self::default();
27743        let tmp = buf.get_u8();
27744        __struct.severity =
27745            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
27746                enum_type: "MavSeverity",
27747                value: tmp as u32,
27748            })?;
27749        for v in &mut __struct.text {
27750            let val = buf.get_u8();
27751            *v = val;
27752        }
27753        __struct.id = buf.get_u16_le();
27754        __struct.chunk_seq = buf.get_u8();
27755        Ok(__struct)
27756    }
27757    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
27758        let mut __tmp = BytesMut::new(bytes);
27759        #[allow(clippy::absurd_extreme_comparisons)]
27760        #[allow(unused_comparisons)]
27761        if __tmp.remaining() < Self::ENCODED_LEN {
27762            panic!(
27763                "buffer is too small (need {} bytes, but got {})",
27764                Self::ENCODED_LEN,
27765                __tmp.remaining(),
27766            )
27767        }
27768        __tmp.put_u8(self.severity as u8);
27769        for val in &self.text {
27770            __tmp.put_u8(*val);
27771        }
27772        __tmp.put_u16_le(self.id);
27773        __tmp.put_u8(self.chunk_seq);
27774        if matches!(version, MavlinkVersion::V2) {
27775            let len = __tmp.len();
27776            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
27777        } else {
27778            __tmp.len()
27779        }
27780    }
27781}
27782#[doc = "id: 261"]
27783#[doc = "Information about a storage medium. This message is sent in response to a request with MAV_CMD_REQUEST_MESSAGE and whenever the status of the storage changes (STORAGE_STATUS). Use MAV_CMD_REQUEST_MESSAGE.param2 to indicate the index/id of requested storage: 0 for all, 1 for first, 2 for second, etc."]
27784#[derive(Debug, Clone, PartialEq)]
27785#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
27786#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27787pub struct STORAGE_INFORMATION_DATA {
27788    #[doc = "Timestamp (time since system boot)."]
27789    pub time_boot_ms: u32,
27790    #[doc = "Total capacity. If storage is not ready (STORAGE_STATUS_READY) value will be ignored."]
27791    pub total_capacity: f32,
27792    #[doc = "Used capacity. If storage is not ready (STORAGE_STATUS_READY) value will be ignored."]
27793    pub used_capacity: f32,
27794    #[doc = "Available storage capacity. If storage is not ready (STORAGE_STATUS_READY) value will be ignored."]
27795    pub available_capacity: f32,
27796    #[doc = "Read speed."]
27797    pub read_speed: f32,
27798    #[doc = "Write speed."]
27799    pub write_speed: f32,
27800    #[doc = "Storage ID (1 for first, 2 for second, etc.)"]
27801    pub storage_id: u8,
27802    #[doc = "Number of storage devices"]
27803    pub storage_count: u8,
27804    #[doc = "Status of storage"]
27805    pub status: StorageStatus,
27806    #[doc = "Type of storage"]
27807    #[cfg_attr(feature = "serde", serde(default))]
27808    pub mavtype: StorageType,
27809    #[doc = "Textual storage name to be used in UI (microSD 1, Internal Memory, etc.) This is a NULL terminated string. If it is exactly 32 characters long, add a terminating NULL. If this string is empty, the generic type is shown to the user."]
27810    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
27811    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
27812    pub name: [u8; 32],
27813    #[doc = "Flags indicating whether this instance is preferred storage for photos, videos, etc.         Note: Implementations should initially set the flags on the system-default storage id used for saving media (if possible/supported).         This setting can then be overridden using MAV_CMD_SET_STORAGE_USAGE.         If the media usage flags are not set, a GCS may assume storage ID 1 is the default storage for all media types."]
27814    #[cfg_attr(feature = "serde", serde(default))]
27815    pub storage_usage: StorageUsageFlag,
27816}
27817impl STORAGE_INFORMATION_DATA {
27818    pub const ENCODED_LEN: usize = 61usize;
27819    pub const DEFAULT: Self = Self {
27820        time_boot_ms: 0_u32,
27821        total_capacity: 0.0_f32,
27822        used_capacity: 0.0_f32,
27823        available_capacity: 0.0_f32,
27824        read_speed: 0.0_f32,
27825        write_speed: 0.0_f32,
27826        storage_id: 0_u8,
27827        storage_count: 0_u8,
27828        status: StorageStatus::DEFAULT,
27829        mavtype: StorageType::DEFAULT,
27830        name: [0_u8; 32usize],
27831        storage_usage: StorageUsageFlag::DEFAULT,
27832    };
27833    #[cfg(feature = "arbitrary")]
27834    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
27835        use arbitrary::{Arbitrary, Unstructured};
27836        let mut buf = [0u8; 1024];
27837        rng.fill_bytes(&mut buf);
27838        let mut unstructured = Unstructured::new(&buf);
27839        Self::arbitrary(&mut unstructured).unwrap_or_default()
27840    }
27841}
27842impl Default for STORAGE_INFORMATION_DATA {
27843    fn default() -> Self {
27844        Self::DEFAULT.clone()
27845    }
27846}
27847impl MessageData for STORAGE_INFORMATION_DATA {
27848    type Message = MavMessage;
27849    const ID: u32 = 261u32;
27850    const NAME: &'static str = "STORAGE_INFORMATION";
27851    const EXTRA_CRC: u8 = 179u8;
27852    const ENCODED_LEN: usize = 61usize;
27853    fn deser(
27854        _version: MavlinkVersion,
27855        __input: &[u8],
27856    ) -> Result<Self, ::mavlink_core::error::ParserError> {
27857        let avail_len = __input.len();
27858        let mut payload_buf = [0; Self::ENCODED_LEN];
27859        let mut buf = if avail_len < Self::ENCODED_LEN {
27860            payload_buf[0..avail_len].copy_from_slice(__input);
27861            Bytes::new(&payload_buf)
27862        } else {
27863            Bytes::new(__input)
27864        };
27865        let mut __struct = Self::default();
27866        __struct.time_boot_ms = buf.get_u32_le();
27867        __struct.total_capacity = buf.get_f32_le();
27868        __struct.used_capacity = buf.get_f32_le();
27869        __struct.available_capacity = buf.get_f32_le();
27870        __struct.read_speed = buf.get_f32_le();
27871        __struct.write_speed = buf.get_f32_le();
27872        __struct.storage_id = buf.get_u8();
27873        __struct.storage_count = buf.get_u8();
27874        let tmp = buf.get_u8();
27875        __struct.status =
27876            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
27877                enum_type: "StorageStatus",
27878                value: tmp as u32,
27879            })?;
27880        let tmp = buf.get_u8();
27881        __struct.mavtype =
27882            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
27883                enum_type: "StorageType",
27884                value: tmp as u32,
27885            })?;
27886        for v in &mut __struct.name {
27887            let val = buf.get_u8();
27888            *v = val;
27889        }
27890        let tmp = buf.get_u8();
27891        __struct.storage_usage = StorageUsageFlag::from_bits(tmp & StorageUsageFlag::all().bits())
27892            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
27893                flag_type: "StorageUsageFlag",
27894                value: tmp as u32,
27895            })?;
27896        Ok(__struct)
27897    }
27898    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
27899        let mut __tmp = BytesMut::new(bytes);
27900        #[allow(clippy::absurd_extreme_comparisons)]
27901        #[allow(unused_comparisons)]
27902        if __tmp.remaining() < Self::ENCODED_LEN {
27903            panic!(
27904                "buffer is too small (need {} bytes, but got {})",
27905                Self::ENCODED_LEN,
27906                __tmp.remaining(),
27907            )
27908        }
27909        __tmp.put_u32_le(self.time_boot_ms);
27910        __tmp.put_f32_le(self.total_capacity);
27911        __tmp.put_f32_le(self.used_capacity);
27912        __tmp.put_f32_le(self.available_capacity);
27913        __tmp.put_f32_le(self.read_speed);
27914        __tmp.put_f32_le(self.write_speed);
27915        __tmp.put_u8(self.storage_id);
27916        __tmp.put_u8(self.storage_count);
27917        __tmp.put_u8(self.status as u8);
27918        __tmp.put_u8(self.mavtype as u8);
27919        for val in &self.name {
27920            __tmp.put_u8(*val);
27921        }
27922        __tmp.put_u8(self.storage_usage.bits());
27923        if matches!(version, MavlinkVersion::V2) {
27924            let len = __tmp.len();
27925            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
27926        } else {
27927            __tmp.len()
27928        }
27929    }
27930}
27931#[doc = "id: 401"]
27932#[doc = "Tune formats supported by vehicle. This should be emitted as response to MAV_CMD_REQUEST_MESSAGE."]
27933#[derive(Debug, Clone, PartialEq)]
27934#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
27935#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27936pub struct SUPPORTED_TUNES_DATA {
27937    #[doc = "Bitfield of supported tune formats."]
27938    pub format: TuneFormat,
27939    #[doc = "System ID"]
27940    pub target_system: u8,
27941    #[doc = "Component ID"]
27942    pub target_component: u8,
27943}
27944impl SUPPORTED_TUNES_DATA {
27945    pub const ENCODED_LEN: usize = 6usize;
27946    pub const DEFAULT: Self = Self {
27947        format: TuneFormat::DEFAULT,
27948        target_system: 0_u8,
27949        target_component: 0_u8,
27950    };
27951    #[cfg(feature = "arbitrary")]
27952    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
27953        use arbitrary::{Arbitrary, Unstructured};
27954        let mut buf = [0u8; 1024];
27955        rng.fill_bytes(&mut buf);
27956        let mut unstructured = Unstructured::new(&buf);
27957        Self::arbitrary(&mut unstructured).unwrap_or_default()
27958    }
27959}
27960impl Default for SUPPORTED_TUNES_DATA {
27961    fn default() -> Self {
27962        Self::DEFAULT.clone()
27963    }
27964}
27965impl MessageData for SUPPORTED_TUNES_DATA {
27966    type Message = MavMessage;
27967    const ID: u32 = 401u32;
27968    const NAME: &'static str = "SUPPORTED_TUNES";
27969    const EXTRA_CRC: u8 = 183u8;
27970    const ENCODED_LEN: usize = 6usize;
27971    fn deser(
27972        _version: MavlinkVersion,
27973        __input: &[u8],
27974    ) -> Result<Self, ::mavlink_core::error::ParserError> {
27975        let avail_len = __input.len();
27976        let mut payload_buf = [0; Self::ENCODED_LEN];
27977        let mut buf = if avail_len < Self::ENCODED_LEN {
27978            payload_buf[0..avail_len].copy_from_slice(__input);
27979            Bytes::new(&payload_buf)
27980        } else {
27981            Bytes::new(__input)
27982        };
27983        let mut __struct = Self::default();
27984        let tmp = buf.get_u32_le();
27985        __struct.format = FromPrimitive::from_u32(tmp).ok_or(
27986            ::mavlink_core::error::ParserError::InvalidEnum {
27987                enum_type: "TuneFormat",
27988                value: tmp as u32,
27989            },
27990        )?;
27991        __struct.target_system = buf.get_u8();
27992        __struct.target_component = buf.get_u8();
27993        Ok(__struct)
27994    }
27995    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
27996        let mut __tmp = BytesMut::new(bytes);
27997        #[allow(clippy::absurd_extreme_comparisons)]
27998        #[allow(unused_comparisons)]
27999        if __tmp.remaining() < Self::ENCODED_LEN {
28000            panic!(
28001                "buffer is too small (need {} bytes, but got {})",
28002                Self::ENCODED_LEN,
28003                __tmp.remaining(),
28004            )
28005        }
28006        __tmp.put_u32_le(self.format as u32);
28007        __tmp.put_u8(self.target_system);
28008        __tmp.put_u8(self.target_component);
28009        if matches!(version, MavlinkVersion::V2) {
28010            let len = __tmp.len();
28011            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
28012        } else {
28013            __tmp.len()
28014        }
28015    }
28016}
28017#[doc = "id: 2"]
28018#[doc = "The system time is the time of the master clock.         This can be emitted by flight controllers, onboard computers, or other components in the MAVLink network.         Components that are using a less reliable time source, such as a battery-backed real time clock, can choose to match their system clock to that of a SYSTEM_TYPE that indicates a more recent time.         This allows more broadly accurate date stamping of logs, and so on.         If precise time synchronization is needed then use TIMESYNC instead."]
28019#[derive(Debug, Clone, PartialEq)]
28020#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28021#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28022pub struct SYSTEM_TIME_DATA {
28023    #[doc = "Timestamp (UNIX epoch time)."]
28024    pub time_unix_usec: u64,
28025    #[doc = "Timestamp (time since system boot)."]
28026    pub time_boot_ms: u32,
28027}
28028impl SYSTEM_TIME_DATA {
28029    pub const ENCODED_LEN: usize = 12usize;
28030    pub const DEFAULT: Self = Self {
28031        time_unix_usec: 0_u64,
28032        time_boot_ms: 0_u32,
28033    };
28034    #[cfg(feature = "arbitrary")]
28035    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
28036        use arbitrary::{Arbitrary, Unstructured};
28037        let mut buf = [0u8; 1024];
28038        rng.fill_bytes(&mut buf);
28039        let mut unstructured = Unstructured::new(&buf);
28040        Self::arbitrary(&mut unstructured).unwrap_or_default()
28041    }
28042}
28043impl Default for SYSTEM_TIME_DATA {
28044    fn default() -> Self {
28045        Self::DEFAULT.clone()
28046    }
28047}
28048impl MessageData for SYSTEM_TIME_DATA {
28049    type Message = MavMessage;
28050    const ID: u32 = 2u32;
28051    const NAME: &'static str = "SYSTEM_TIME";
28052    const EXTRA_CRC: u8 = 137u8;
28053    const ENCODED_LEN: usize = 12usize;
28054    fn deser(
28055        _version: MavlinkVersion,
28056        __input: &[u8],
28057    ) -> Result<Self, ::mavlink_core::error::ParserError> {
28058        let avail_len = __input.len();
28059        let mut payload_buf = [0; Self::ENCODED_LEN];
28060        let mut buf = if avail_len < Self::ENCODED_LEN {
28061            payload_buf[0..avail_len].copy_from_slice(__input);
28062            Bytes::new(&payload_buf)
28063        } else {
28064            Bytes::new(__input)
28065        };
28066        let mut __struct = Self::default();
28067        __struct.time_unix_usec = buf.get_u64_le();
28068        __struct.time_boot_ms = buf.get_u32_le();
28069        Ok(__struct)
28070    }
28071    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
28072        let mut __tmp = BytesMut::new(bytes);
28073        #[allow(clippy::absurd_extreme_comparisons)]
28074        #[allow(unused_comparisons)]
28075        if __tmp.remaining() < Self::ENCODED_LEN {
28076            panic!(
28077                "buffer is too small (need {} bytes, but got {})",
28078                Self::ENCODED_LEN,
28079                __tmp.remaining(),
28080            )
28081        }
28082        __tmp.put_u64_le(self.time_unix_usec);
28083        __tmp.put_u32_le(self.time_boot_ms);
28084        if matches!(version, MavlinkVersion::V2) {
28085            let len = __tmp.len();
28086            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
28087        } else {
28088            __tmp.len()
28089        }
28090    }
28091}
28092#[doc = "id: 1"]
28093#[doc = "The general system state. If the system is following the MAVLink standard, the system state is mainly defined by three orthogonal states/modes: The system mode, which is either LOCKED (motors shut down and locked), MANUAL (system under RC control), GUIDED (system with autonomous position control, position setpoint controlled manually) or AUTO (system guided by path/waypoint planner). The NAV_MODE defined the current flight state: LIFTOFF (often an open-loop maneuver), LANDING, WAYPOINTS or VECTOR. This represents the internal navigation state machine. The system status shows whether the system is currently active or not and if an emergency occurred. During the CRITICAL and EMERGENCY states the MAV is still considered to be active, but should start emergency procedures autonomously. After a failure occurred it should first move from active to critical to allow manual intervention and then move to emergency after a certain timeout."]
28094#[derive(Debug, Clone, PartialEq)]
28095#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28096#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28097pub struct SYS_STATUS_DATA {
28098    #[doc = "Bitmap showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present."]
28099    pub onboard_control_sensors_present: MavSysStatusSensor,
28100    #[doc = "Bitmap showing which onboard controllers and sensors are enabled:  Value of 0: not enabled. Value of 1: enabled."]
28101    pub onboard_control_sensors_enabled: MavSysStatusSensor,
28102    #[doc = "Bitmap showing which onboard controllers and sensors have an error (or are operational). Value of 0: error. Value of 1: healthy."]
28103    pub onboard_control_sensors_health: MavSysStatusSensor,
28104    #[doc = "Maximum usage in percent of the mainloop time. Values: [0-1000] - should always be below 1000"]
28105    pub load: u16,
28106    #[doc = "Battery voltage, UINT16_MAX: Voltage not sent by autopilot"]
28107    pub voltage_battery: u16,
28108    #[doc = "Battery current, -1: Current not sent by autopilot"]
28109    pub current_battery: i16,
28110    #[doc = "Communication drop rate, (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)"]
28111    pub drop_rate_comm: u16,
28112    #[doc = "Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)"]
28113    pub errors_comm: u16,
28114    #[doc = "Autopilot-specific errors"]
28115    pub errors_count1: u16,
28116    #[doc = "Autopilot-specific errors"]
28117    pub errors_count2: u16,
28118    #[doc = "Autopilot-specific errors"]
28119    pub errors_count3: u16,
28120    #[doc = "Autopilot-specific errors"]
28121    pub errors_count4: u16,
28122    #[doc = "Battery energy remaining, -1: Battery remaining energy not sent by autopilot"]
28123    pub battery_remaining: i8,
28124    #[doc = "Bitmap showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present."]
28125    #[cfg_attr(feature = "serde", serde(default))]
28126    pub onboard_control_sensors_present_extended: MavSysStatusSensorExtended,
28127    #[doc = "Bitmap showing which onboard controllers and sensors are enabled:  Value of 0: not enabled. Value of 1: enabled."]
28128    #[cfg_attr(feature = "serde", serde(default))]
28129    pub onboard_control_sensors_enabled_extended: MavSysStatusSensorExtended,
28130    #[doc = "Bitmap showing which onboard controllers and sensors have an error (or are operational). Value of 0: error. Value of 1: healthy."]
28131    #[cfg_attr(feature = "serde", serde(default))]
28132    pub onboard_control_sensors_health_extended: MavSysStatusSensorExtended,
28133}
28134impl SYS_STATUS_DATA {
28135    pub const ENCODED_LEN: usize = 43usize;
28136    pub const DEFAULT: Self = Self {
28137        onboard_control_sensors_present: MavSysStatusSensor::DEFAULT,
28138        onboard_control_sensors_enabled: MavSysStatusSensor::DEFAULT,
28139        onboard_control_sensors_health: MavSysStatusSensor::DEFAULT,
28140        load: 0_u16,
28141        voltage_battery: 0_u16,
28142        current_battery: 0_i16,
28143        drop_rate_comm: 0_u16,
28144        errors_comm: 0_u16,
28145        errors_count1: 0_u16,
28146        errors_count2: 0_u16,
28147        errors_count3: 0_u16,
28148        errors_count4: 0_u16,
28149        battery_remaining: 0_i8,
28150        onboard_control_sensors_present_extended: MavSysStatusSensorExtended::DEFAULT,
28151        onboard_control_sensors_enabled_extended: MavSysStatusSensorExtended::DEFAULT,
28152        onboard_control_sensors_health_extended: MavSysStatusSensorExtended::DEFAULT,
28153    };
28154    #[cfg(feature = "arbitrary")]
28155    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
28156        use arbitrary::{Arbitrary, Unstructured};
28157        let mut buf = [0u8; 1024];
28158        rng.fill_bytes(&mut buf);
28159        let mut unstructured = Unstructured::new(&buf);
28160        Self::arbitrary(&mut unstructured).unwrap_or_default()
28161    }
28162}
28163impl Default for SYS_STATUS_DATA {
28164    fn default() -> Self {
28165        Self::DEFAULT.clone()
28166    }
28167}
28168impl MessageData for SYS_STATUS_DATA {
28169    type Message = MavMessage;
28170    const ID: u32 = 1u32;
28171    const NAME: &'static str = "SYS_STATUS";
28172    const EXTRA_CRC: u8 = 124u8;
28173    const ENCODED_LEN: usize = 43usize;
28174    fn deser(
28175        _version: MavlinkVersion,
28176        __input: &[u8],
28177    ) -> Result<Self, ::mavlink_core::error::ParserError> {
28178        let avail_len = __input.len();
28179        let mut payload_buf = [0; Self::ENCODED_LEN];
28180        let mut buf = if avail_len < Self::ENCODED_LEN {
28181            payload_buf[0..avail_len].copy_from_slice(__input);
28182            Bytes::new(&payload_buf)
28183        } else {
28184            Bytes::new(__input)
28185        };
28186        let mut __struct = Self::default();
28187        let tmp = buf.get_u32_le();
28188        __struct.onboard_control_sensors_present = MavSysStatusSensor::from_bits(
28189            tmp & MavSysStatusSensor::all().bits(),
28190        )
28191        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
28192            flag_type: "MavSysStatusSensor",
28193            value: tmp as u32,
28194        })?;
28195        let tmp = buf.get_u32_le();
28196        __struct.onboard_control_sensors_enabled = MavSysStatusSensor::from_bits(
28197            tmp & MavSysStatusSensor::all().bits(),
28198        )
28199        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
28200            flag_type: "MavSysStatusSensor",
28201            value: tmp as u32,
28202        })?;
28203        let tmp = buf.get_u32_le();
28204        __struct.onboard_control_sensors_health = MavSysStatusSensor::from_bits(
28205            tmp & MavSysStatusSensor::all().bits(),
28206        )
28207        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
28208            flag_type: "MavSysStatusSensor",
28209            value: tmp as u32,
28210        })?;
28211        __struct.load = buf.get_u16_le();
28212        __struct.voltage_battery = buf.get_u16_le();
28213        __struct.current_battery = buf.get_i16_le();
28214        __struct.drop_rate_comm = buf.get_u16_le();
28215        __struct.errors_comm = buf.get_u16_le();
28216        __struct.errors_count1 = buf.get_u16_le();
28217        __struct.errors_count2 = buf.get_u16_le();
28218        __struct.errors_count3 = buf.get_u16_le();
28219        __struct.errors_count4 = buf.get_u16_le();
28220        __struct.battery_remaining = buf.get_i8();
28221        let tmp = buf.get_u32_le();
28222        __struct.onboard_control_sensors_present_extended =
28223            MavSysStatusSensorExtended::from_bits(tmp & MavSysStatusSensorExtended::all().bits())
28224                .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
28225                flag_type: "MavSysStatusSensorExtended",
28226                value: tmp as u32,
28227            })?;
28228        let tmp = buf.get_u32_le();
28229        __struct.onboard_control_sensors_enabled_extended =
28230            MavSysStatusSensorExtended::from_bits(tmp & MavSysStatusSensorExtended::all().bits())
28231                .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
28232                flag_type: "MavSysStatusSensorExtended",
28233                value: tmp as u32,
28234            })?;
28235        let tmp = buf.get_u32_le();
28236        __struct.onboard_control_sensors_health_extended =
28237            MavSysStatusSensorExtended::from_bits(tmp & MavSysStatusSensorExtended::all().bits())
28238                .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
28239                flag_type: "MavSysStatusSensorExtended",
28240                value: tmp as u32,
28241            })?;
28242        Ok(__struct)
28243    }
28244    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
28245        let mut __tmp = BytesMut::new(bytes);
28246        #[allow(clippy::absurd_extreme_comparisons)]
28247        #[allow(unused_comparisons)]
28248        if __tmp.remaining() < Self::ENCODED_LEN {
28249            panic!(
28250                "buffer is too small (need {} bytes, but got {})",
28251                Self::ENCODED_LEN,
28252                __tmp.remaining(),
28253            )
28254        }
28255        __tmp.put_u32_le(self.onboard_control_sensors_present.bits());
28256        __tmp.put_u32_le(self.onboard_control_sensors_enabled.bits());
28257        __tmp.put_u32_le(self.onboard_control_sensors_health.bits());
28258        __tmp.put_u16_le(self.load);
28259        __tmp.put_u16_le(self.voltage_battery);
28260        __tmp.put_i16_le(self.current_battery);
28261        __tmp.put_u16_le(self.drop_rate_comm);
28262        __tmp.put_u16_le(self.errors_comm);
28263        __tmp.put_u16_le(self.errors_count1);
28264        __tmp.put_u16_le(self.errors_count2);
28265        __tmp.put_u16_le(self.errors_count3);
28266        __tmp.put_u16_le(self.errors_count4);
28267        __tmp.put_i8(self.battery_remaining);
28268        __tmp.put_u32_le(self.onboard_control_sensors_present_extended.bits());
28269        __tmp.put_u32_le(self.onboard_control_sensors_enabled_extended.bits());
28270        __tmp.put_u32_le(self.onboard_control_sensors_health_extended.bits());
28271        if matches!(version, MavlinkVersion::V2) {
28272            let len = __tmp.len();
28273            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
28274        } else {
28275            __tmp.len()
28276        }
28277    }
28278}
28279#[doc = "id: 135"]
28280#[doc = "Request that the vehicle report terrain height at the given location (expected response is a TERRAIN_REPORT). Used by GCS to check if vehicle has all terrain data needed for a mission."]
28281#[derive(Debug, Clone, PartialEq)]
28282#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28283#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28284pub struct TERRAIN_CHECK_DATA {
28285    #[doc = "Latitude"]
28286    pub lat: i32,
28287    #[doc = "Longitude"]
28288    pub lon: i32,
28289}
28290impl TERRAIN_CHECK_DATA {
28291    pub const ENCODED_LEN: usize = 8usize;
28292    pub const DEFAULT: Self = Self {
28293        lat: 0_i32,
28294        lon: 0_i32,
28295    };
28296    #[cfg(feature = "arbitrary")]
28297    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
28298        use arbitrary::{Arbitrary, Unstructured};
28299        let mut buf = [0u8; 1024];
28300        rng.fill_bytes(&mut buf);
28301        let mut unstructured = Unstructured::new(&buf);
28302        Self::arbitrary(&mut unstructured).unwrap_or_default()
28303    }
28304}
28305impl Default for TERRAIN_CHECK_DATA {
28306    fn default() -> Self {
28307        Self::DEFAULT.clone()
28308    }
28309}
28310impl MessageData for TERRAIN_CHECK_DATA {
28311    type Message = MavMessage;
28312    const ID: u32 = 135u32;
28313    const NAME: &'static str = "TERRAIN_CHECK";
28314    const EXTRA_CRC: u8 = 203u8;
28315    const ENCODED_LEN: usize = 8usize;
28316    fn deser(
28317        _version: MavlinkVersion,
28318        __input: &[u8],
28319    ) -> Result<Self, ::mavlink_core::error::ParserError> {
28320        let avail_len = __input.len();
28321        let mut payload_buf = [0; Self::ENCODED_LEN];
28322        let mut buf = if avail_len < Self::ENCODED_LEN {
28323            payload_buf[0..avail_len].copy_from_slice(__input);
28324            Bytes::new(&payload_buf)
28325        } else {
28326            Bytes::new(__input)
28327        };
28328        let mut __struct = Self::default();
28329        __struct.lat = buf.get_i32_le();
28330        __struct.lon = buf.get_i32_le();
28331        Ok(__struct)
28332    }
28333    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
28334        let mut __tmp = BytesMut::new(bytes);
28335        #[allow(clippy::absurd_extreme_comparisons)]
28336        #[allow(unused_comparisons)]
28337        if __tmp.remaining() < Self::ENCODED_LEN {
28338            panic!(
28339                "buffer is too small (need {} bytes, but got {})",
28340                Self::ENCODED_LEN,
28341                __tmp.remaining(),
28342            )
28343        }
28344        __tmp.put_i32_le(self.lat);
28345        __tmp.put_i32_le(self.lon);
28346        if matches!(version, MavlinkVersion::V2) {
28347            let len = __tmp.len();
28348            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
28349        } else {
28350            __tmp.len()
28351        }
28352    }
28353}
28354#[doc = "id: 134"]
28355#[doc = "Terrain data sent from GCS. The lat/lon and grid_spacing must be the same as a lat/lon from a TERRAIN_REQUEST. See terrain protocol docs: <https://mavlink.io/en/services/terrain.html>."]
28356#[derive(Debug, Clone, PartialEq)]
28357#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28358#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28359pub struct TERRAIN_DATA_DATA {
28360    #[doc = "Latitude of SW corner of first grid"]
28361    pub lat: i32,
28362    #[doc = "Longitude of SW corner of first grid"]
28363    pub lon: i32,
28364    #[doc = "Grid spacing"]
28365    pub grid_spacing: u16,
28366    #[doc = "Terrain data MSL"]
28367    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28368    pub data: [i16; 16],
28369    #[doc = "bit within the terrain request mask"]
28370    pub gridbit: u8,
28371}
28372impl TERRAIN_DATA_DATA {
28373    pub const ENCODED_LEN: usize = 43usize;
28374    pub const DEFAULT: Self = Self {
28375        lat: 0_i32,
28376        lon: 0_i32,
28377        grid_spacing: 0_u16,
28378        data: [0_i16; 16usize],
28379        gridbit: 0_u8,
28380    };
28381    #[cfg(feature = "arbitrary")]
28382    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
28383        use arbitrary::{Arbitrary, Unstructured};
28384        let mut buf = [0u8; 1024];
28385        rng.fill_bytes(&mut buf);
28386        let mut unstructured = Unstructured::new(&buf);
28387        Self::arbitrary(&mut unstructured).unwrap_or_default()
28388    }
28389}
28390impl Default for TERRAIN_DATA_DATA {
28391    fn default() -> Self {
28392        Self::DEFAULT.clone()
28393    }
28394}
28395impl MessageData for TERRAIN_DATA_DATA {
28396    type Message = MavMessage;
28397    const ID: u32 = 134u32;
28398    const NAME: &'static str = "TERRAIN_DATA";
28399    const EXTRA_CRC: u8 = 229u8;
28400    const ENCODED_LEN: usize = 43usize;
28401    fn deser(
28402        _version: MavlinkVersion,
28403        __input: &[u8],
28404    ) -> Result<Self, ::mavlink_core::error::ParserError> {
28405        let avail_len = __input.len();
28406        let mut payload_buf = [0; Self::ENCODED_LEN];
28407        let mut buf = if avail_len < Self::ENCODED_LEN {
28408            payload_buf[0..avail_len].copy_from_slice(__input);
28409            Bytes::new(&payload_buf)
28410        } else {
28411            Bytes::new(__input)
28412        };
28413        let mut __struct = Self::default();
28414        __struct.lat = buf.get_i32_le();
28415        __struct.lon = buf.get_i32_le();
28416        __struct.grid_spacing = buf.get_u16_le();
28417        for v in &mut __struct.data {
28418            let val = buf.get_i16_le();
28419            *v = val;
28420        }
28421        __struct.gridbit = buf.get_u8();
28422        Ok(__struct)
28423    }
28424    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
28425        let mut __tmp = BytesMut::new(bytes);
28426        #[allow(clippy::absurd_extreme_comparisons)]
28427        #[allow(unused_comparisons)]
28428        if __tmp.remaining() < Self::ENCODED_LEN {
28429            panic!(
28430                "buffer is too small (need {} bytes, but got {})",
28431                Self::ENCODED_LEN,
28432                __tmp.remaining(),
28433            )
28434        }
28435        __tmp.put_i32_le(self.lat);
28436        __tmp.put_i32_le(self.lon);
28437        __tmp.put_u16_le(self.grid_spacing);
28438        for val in &self.data {
28439            __tmp.put_i16_le(*val);
28440        }
28441        __tmp.put_u8(self.gridbit);
28442        if matches!(version, MavlinkVersion::V2) {
28443            let len = __tmp.len();
28444            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
28445        } else {
28446            __tmp.len()
28447        }
28448    }
28449}
28450#[doc = "id: 136"]
28451#[doc = "Streamed from drone to report progress of terrain map download (initiated by TERRAIN_REQUEST), or sent as a response to a TERRAIN_CHECK request. See terrain protocol docs: <https://mavlink.io/en/services/terrain.html>."]
28452#[derive(Debug, Clone, PartialEq)]
28453#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28454#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28455pub struct TERRAIN_REPORT_DATA {
28456    #[doc = "Latitude"]
28457    pub lat: i32,
28458    #[doc = "Longitude"]
28459    pub lon: i32,
28460    #[doc = "Terrain height MSL"]
28461    pub terrain_height: f32,
28462    #[doc = "Current vehicle height above lat/lon terrain height"]
28463    pub current_height: f32,
28464    #[doc = "grid spacing (zero if terrain at this location unavailable)"]
28465    pub spacing: u16,
28466    #[doc = "Number of 4x4 terrain blocks waiting to be received or read from disk"]
28467    pub pending: u16,
28468    #[doc = "Number of 4x4 terrain blocks in memory"]
28469    pub loaded: u16,
28470}
28471impl TERRAIN_REPORT_DATA {
28472    pub const ENCODED_LEN: usize = 22usize;
28473    pub const DEFAULT: Self = Self {
28474        lat: 0_i32,
28475        lon: 0_i32,
28476        terrain_height: 0.0_f32,
28477        current_height: 0.0_f32,
28478        spacing: 0_u16,
28479        pending: 0_u16,
28480        loaded: 0_u16,
28481    };
28482    #[cfg(feature = "arbitrary")]
28483    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
28484        use arbitrary::{Arbitrary, Unstructured};
28485        let mut buf = [0u8; 1024];
28486        rng.fill_bytes(&mut buf);
28487        let mut unstructured = Unstructured::new(&buf);
28488        Self::arbitrary(&mut unstructured).unwrap_or_default()
28489    }
28490}
28491impl Default for TERRAIN_REPORT_DATA {
28492    fn default() -> Self {
28493        Self::DEFAULT.clone()
28494    }
28495}
28496impl MessageData for TERRAIN_REPORT_DATA {
28497    type Message = MavMessage;
28498    const ID: u32 = 136u32;
28499    const NAME: &'static str = "TERRAIN_REPORT";
28500    const EXTRA_CRC: u8 = 1u8;
28501    const ENCODED_LEN: usize = 22usize;
28502    fn deser(
28503        _version: MavlinkVersion,
28504        __input: &[u8],
28505    ) -> Result<Self, ::mavlink_core::error::ParserError> {
28506        let avail_len = __input.len();
28507        let mut payload_buf = [0; Self::ENCODED_LEN];
28508        let mut buf = if avail_len < Self::ENCODED_LEN {
28509            payload_buf[0..avail_len].copy_from_slice(__input);
28510            Bytes::new(&payload_buf)
28511        } else {
28512            Bytes::new(__input)
28513        };
28514        let mut __struct = Self::default();
28515        __struct.lat = buf.get_i32_le();
28516        __struct.lon = buf.get_i32_le();
28517        __struct.terrain_height = buf.get_f32_le();
28518        __struct.current_height = buf.get_f32_le();
28519        __struct.spacing = buf.get_u16_le();
28520        __struct.pending = buf.get_u16_le();
28521        __struct.loaded = buf.get_u16_le();
28522        Ok(__struct)
28523    }
28524    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
28525        let mut __tmp = BytesMut::new(bytes);
28526        #[allow(clippy::absurd_extreme_comparisons)]
28527        #[allow(unused_comparisons)]
28528        if __tmp.remaining() < Self::ENCODED_LEN {
28529            panic!(
28530                "buffer is too small (need {} bytes, but got {})",
28531                Self::ENCODED_LEN,
28532                __tmp.remaining(),
28533            )
28534        }
28535        __tmp.put_i32_le(self.lat);
28536        __tmp.put_i32_le(self.lon);
28537        __tmp.put_f32_le(self.terrain_height);
28538        __tmp.put_f32_le(self.current_height);
28539        __tmp.put_u16_le(self.spacing);
28540        __tmp.put_u16_le(self.pending);
28541        __tmp.put_u16_le(self.loaded);
28542        if matches!(version, MavlinkVersion::V2) {
28543            let len = __tmp.len();
28544            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
28545        } else {
28546            __tmp.len()
28547        }
28548    }
28549}
28550#[doc = "id: 133"]
28551#[doc = "Request for terrain data and terrain status. See terrain protocol docs: <https://mavlink.io/en/services/terrain.html>."]
28552#[derive(Debug, Clone, PartialEq)]
28553#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28554#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28555pub struct TERRAIN_REQUEST_DATA {
28556    #[doc = "Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits)"]
28557    pub mask: u64,
28558    #[doc = "Latitude of SW corner of first grid"]
28559    pub lat: i32,
28560    #[doc = "Longitude of SW corner of first grid"]
28561    pub lon: i32,
28562    #[doc = "Grid spacing"]
28563    pub grid_spacing: u16,
28564}
28565impl TERRAIN_REQUEST_DATA {
28566    pub const ENCODED_LEN: usize = 18usize;
28567    pub const DEFAULT: Self = Self {
28568        mask: 0_u64,
28569        lat: 0_i32,
28570        lon: 0_i32,
28571        grid_spacing: 0_u16,
28572    };
28573    #[cfg(feature = "arbitrary")]
28574    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
28575        use arbitrary::{Arbitrary, Unstructured};
28576        let mut buf = [0u8; 1024];
28577        rng.fill_bytes(&mut buf);
28578        let mut unstructured = Unstructured::new(&buf);
28579        Self::arbitrary(&mut unstructured).unwrap_or_default()
28580    }
28581}
28582impl Default for TERRAIN_REQUEST_DATA {
28583    fn default() -> Self {
28584        Self::DEFAULT.clone()
28585    }
28586}
28587impl MessageData for TERRAIN_REQUEST_DATA {
28588    type Message = MavMessage;
28589    const ID: u32 = 133u32;
28590    const NAME: &'static str = "TERRAIN_REQUEST";
28591    const EXTRA_CRC: u8 = 6u8;
28592    const ENCODED_LEN: usize = 18usize;
28593    fn deser(
28594        _version: MavlinkVersion,
28595        __input: &[u8],
28596    ) -> Result<Self, ::mavlink_core::error::ParserError> {
28597        let avail_len = __input.len();
28598        let mut payload_buf = [0; Self::ENCODED_LEN];
28599        let mut buf = if avail_len < Self::ENCODED_LEN {
28600            payload_buf[0..avail_len].copy_from_slice(__input);
28601            Bytes::new(&payload_buf)
28602        } else {
28603            Bytes::new(__input)
28604        };
28605        let mut __struct = Self::default();
28606        __struct.mask = buf.get_u64_le();
28607        __struct.lat = buf.get_i32_le();
28608        __struct.lon = buf.get_i32_le();
28609        __struct.grid_spacing = buf.get_u16_le();
28610        Ok(__struct)
28611    }
28612    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
28613        let mut __tmp = BytesMut::new(bytes);
28614        #[allow(clippy::absurd_extreme_comparisons)]
28615        #[allow(unused_comparisons)]
28616        if __tmp.remaining() < Self::ENCODED_LEN {
28617            panic!(
28618                "buffer is too small (need {} bytes, but got {})",
28619                Self::ENCODED_LEN,
28620                __tmp.remaining(),
28621            )
28622        }
28623        __tmp.put_u64_le(self.mask);
28624        __tmp.put_i32_le(self.lat);
28625        __tmp.put_i32_le(self.lon);
28626        __tmp.put_u16_le(self.grid_spacing);
28627        if matches!(version, MavlinkVersion::V2) {
28628            let len = __tmp.len();
28629            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
28630        } else {
28631            __tmp.len()
28632        }
28633    }
28634}
28635#[doc = "id: 111"]
28636#[doc = "Time synchronization message.         The message is used for both timesync requests and responses.         The request is sent with `ts1=syncing component timestamp` and `tc1=0`, and may be broadcast or targeted to a specific system/component.         The response is sent with `ts1=syncing component timestamp` (mirror back unchanged), and `tc1=responding component timestamp`, with the `target_system` and `target_component` set to ids of the original request.         Systems can determine if they are receiving a request or response based on the value of `tc`.         If the response has `target_system==target_component==0` the remote system has not been updated to use the component IDs and cannot reliably timesync; the requestor may report an error.         Timestamps are UNIX Epoch time or time since system boot in nanoseconds (the timestamp format can be inferred by checking for the magnitude of the number; generally it doesn't matter as only the offset is used).         The message sequence is repeated numerous times with results being filtered/averaged to estimate the offset.         See also: <https://mavlink.io/en/services/timesync.html>."]
28637#[derive(Debug, Clone, PartialEq)]
28638#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28639#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28640pub struct TIMESYNC_DATA {
28641    #[doc = "Time sync timestamp 1. Syncing: 0. Responding: Timestamp of responding component."]
28642    pub tc1: i64,
28643    #[doc = "Time sync timestamp 2. Timestamp of syncing component (mirrored in response)."]
28644    pub ts1: i64,
28645    #[doc = "Target system id. Request: 0 (broadcast) or id of specific system. Response must contain system id of the requesting component."]
28646    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
28647    pub target_system: u8,
28648    #[doc = "Target component id. Request: 0 (broadcast) or id of specific component. Response must contain component id of the requesting component."]
28649    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
28650    pub target_component: u8,
28651}
28652impl TIMESYNC_DATA {
28653    pub const ENCODED_LEN: usize = 18usize;
28654    pub const DEFAULT: Self = Self {
28655        tc1: 0_i64,
28656        ts1: 0_i64,
28657        target_system: 0_u8,
28658        target_component: 0_u8,
28659    };
28660    #[cfg(feature = "arbitrary")]
28661    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
28662        use arbitrary::{Arbitrary, Unstructured};
28663        let mut buf = [0u8; 1024];
28664        rng.fill_bytes(&mut buf);
28665        let mut unstructured = Unstructured::new(&buf);
28666        Self::arbitrary(&mut unstructured).unwrap_or_default()
28667    }
28668}
28669impl Default for TIMESYNC_DATA {
28670    fn default() -> Self {
28671        Self::DEFAULT.clone()
28672    }
28673}
28674impl MessageData for TIMESYNC_DATA {
28675    type Message = MavMessage;
28676    const ID: u32 = 111u32;
28677    const NAME: &'static str = "TIMESYNC";
28678    const EXTRA_CRC: u8 = 34u8;
28679    const ENCODED_LEN: usize = 18usize;
28680    fn deser(
28681        _version: MavlinkVersion,
28682        __input: &[u8],
28683    ) -> Result<Self, ::mavlink_core::error::ParserError> {
28684        let avail_len = __input.len();
28685        let mut payload_buf = [0; Self::ENCODED_LEN];
28686        let mut buf = if avail_len < Self::ENCODED_LEN {
28687            payload_buf[0..avail_len].copy_from_slice(__input);
28688            Bytes::new(&payload_buf)
28689        } else {
28690            Bytes::new(__input)
28691        };
28692        let mut __struct = Self::default();
28693        __struct.tc1 = buf.get_i64_le();
28694        __struct.ts1 = buf.get_i64_le();
28695        __struct.target_system = buf.get_u8();
28696        __struct.target_component = buf.get_u8();
28697        Ok(__struct)
28698    }
28699    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
28700        let mut __tmp = BytesMut::new(bytes);
28701        #[allow(clippy::absurd_extreme_comparisons)]
28702        #[allow(unused_comparisons)]
28703        if __tmp.remaining() < Self::ENCODED_LEN {
28704            panic!(
28705                "buffer is too small (need {} bytes, but got {})",
28706                Self::ENCODED_LEN,
28707                __tmp.remaining(),
28708            )
28709        }
28710        __tmp.put_i64_le(self.tc1);
28711        __tmp.put_i64_le(self.ts1);
28712        __tmp.put_u8(self.target_system);
28713        __tmp.put_u8(self.target_component);
28714        if matches!(version, MavlinkVersion::V2) {
28715            let len = __tmp.len();
28716            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
28717        } else {
28718            __tmp.len()
28719        }
28720    }
28721}
28722#[doc = "id: 380"]
28723#[doc = "Time/duration estimates for various events and actions given the current vehicle state and position."]
28724#[derive(Debug, Clone, PartialEq)]
28725#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28726#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28727pub struct TIME_ESTIMATE_TO_TARGET_DATA {
28728    #[doc = "Estimated time to complete the vehicle's configured \"safe return\" action from its current position (e.g. RTL, Smart RTL, etc.). -1 indicates that the vehicle is landed, or that no time estimate available."]
28729    pub safe_return: i32,
28730    #[doc = "Estimated time for vehicle to complete the LAND action from its current position. -1 indicates that the vehicle is landed, or that no time estimate available."]
28731    pub land: i32,
28732    #[doc = "Estimated time for reaching/completing the currently active mission item. -1 means no time estimate available."]
28733    pub mission_next_item: i32,
28734    #[doc = "Estimated time for completing the current mission. -1 means no mission active and/or no estimate available."]
28735    pub mission_end: i32,
28736    #[doc = "Estimated time for completing the current commanded action (i.e. Go To, Takeoff, Land, etc.). -1 means no action active and/or no estimate available."]
28737    pub commanded_action: i32,
28738}
28739impl TIME_ESTIMATE_TO_TARGET_DATA {
28740    pub const ENCODED_LEN: usize = 20usize;
28741    pub const DEFAULT: Self = Self {
28742        safe_return: 0_i32,
28743        land: 0_i32,
28744        mission_next_item: 0_i32,
28745        mission_end: 0_i32,
28746        commanded_action: 0_i32,
28747    };
28748    #[cfg(feature = "arbitrary")]
28749    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
28750        use arbitrary::{Arbitrary, Unstructured};
28751        let mut buf = [0u8; 1024];
28752        rng.fill_bytes(&mut buf);
28753        let mut unstructured = Unstructured::new(&buf);
28754        Self::arbitrary(&mut unstructured).unwrap_or_default()
28755    }
28756}
28757impl Default for TIME_ESTIMATE_TO_TARGET_DATA {
28758    fn default() -> Self {
28759        Self::DEFAULT.clone()
28760    }
28761}
28762impl MessageData for TIME_ESTIMATE_TO_TARGET_DATA {
28763    type Message = MavMessage;
28764    const ID: u32 = 380u32;
28765    const NAME: &'static str = "TIME_ESTIMATE_TO_TARGET";
28766    const EXTRA_CRC: u8 = 232u8;
28767    const ENCODED_LEN: usize = 20usize;
28768    fn deser(
28769        _version: MavlinkVersion,
28770        __input: &[u8],
28771    ) -> Result<Self, ::mavlink_core::error::ParserError> {
28772        let avail_len = __input.len();
28773        let mut payload_buf = [0; Self::ENCODED_LEN];
28774        let mut buf = if avail_len < Self::ENCODED_LEN {
28775            payload_buf[0..avail_len].copy_from_slice(__input);
28776            Bytes::new(&payload_buf)
28777        } else {
28778            Bytes::new(__input)
28779        };
28780        let mut __struct = Self::default();
28781        __struct.safe_return = buf.get_i32_le();
28782        __struct.land = buf.get_i32_le();
28783        __struct.mission_next_item = buf.get_i32_le();
28784        __struct.mission_end = buf.get_i32_le();
28785        __struct.commanded_action = buf.get_i32_le();
28786        Ok(__struct)
28787    }
28788    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
28789        let mut __tmp = BytesMut::new(bytes);
28790        #[allow(clippy::absurd_extreme_comparisons)]
28791        #[allow(unused_comparisons)]
28792        if __tmp.remaining() < Self::ENCODED_LEN {
28793            panic!(
28794                "buffer is too small (need {} bytes, but got {})",
28795                Self::ENCODED_LEN,
28796                __tmp.remaining(),
28797            )
28798        }
28799        __tmp.put_i32_le(self.safe_return);
28800        __tmp.put_i32_le(self.land);
28801        __tmp.put_i32_le(self.mission_next_item);
28802        __tmp.put_i32_le(self.mission_end);
28803        __tmp.put_i32_le(self.commanded_action);
28804        if matches!(version, MavlinkVersion::V2) {
28805            let len = __tmp.len();
28806            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
28807        } else {
28808            __tmp.len()
28809        }
28810    }
28811}
28812#[doc = "id: 333"]
28813#[doc = "Describe a trajectory using an array of up-to 5 bezier control points in the local frame (MAV_FRAME_LOCAL_NED)."]
28814#[derive(Debug, Clone, PartialEq)]
28815#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28816#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28817pub struct TRAJECTORY_REPRESENTATION_BEZIER_DATA {
28818    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
28819    pub time_usec: u64,
28820    #[doc = "X-coordinate of bezier control points. Set to NaN if not being used"]
28821    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28822    pub pos_x: [f32; 5],
28823    #[doc = "Y-coordinate of bezier control points. Set to NaN if not being used"]
28824    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28825    pub pos_y: [f32; 5],
28826    #[doc = "Z-coordinate of bezier control points. Set to NaN if not being used"]
28827    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28828    pub pos_z: [f32; 5],
28829    #[doc = "Bezier time horizon. Set to NaN if velocity/acceleration should not be incorporated"]
28830    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28831    pub delta: [f32; 5],
28832    #[doc = "Yaw. Set to NaN for unchanged"]
28833    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28834    pub pos_yaw: [f32; 5],
28835    #[doc = "Number of valid control points (up-to 5 points are possible)"]
28836    pub valid_points: u8,
28837}
28838impl TRAJECTORY_REPRESENTATION_BEZIER_DATA {
28839    pub const ENCODED_LEN: usize = 109usize;
28840    pub const DEFAULT: Self = Self {
28841        time_usec: 0_u64,
28842        pos_x: [0.0_f32; 5usize],
28843        pos_y: [0.0_f32; 5usize],
28844        pos_z: [0.0_f32; 5usize],
28845        delta: [0.0_f32; 5usize],
28846        pos_yaw: [0.0_f32; 5usize],
28847        valid_points: 0_u8,
28848    };
28849    #[cfg(feature = "arbitrary")]
28850    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
28851        use arbitrary::{Arbitrary, Unstructured};
28852        let mut buf = [0u8; 1024];
28853        rng.fill_bytes(&mut buf);
28854        let mut unstructured = Unstructured::new(&buf);
28855        Self::arbitrary(&mut unstructured).unwrap_or_default()
28856    }
28857}
28858impl Default for TRAJECTORY_REPRESENTATION_BEZIER_DATA {
28859    fn default() -> Self {
28860        Self::DEFAULT.clone()
28861    }
28862}
28863impl MessageData for TRAJECTORY_REPRESENTATION_BEZIER_DATA {
28864    type Message = MavMessage;
28865    const ID: u32 = 333u32;
28866    const NAME: &'static str = "TRAJECTORY_REPRESENTATION_BEZIER";
28867    const EXTRA_CRC: u8 = 231u8;
28868    const ENCODED_LEN: usize = 109usize;
28869    fn deser(
28870        _version: MavlinkVersion,
28871        __input: &[u8],
28872    ) -> Result<Self, ::mavlink_core::error::ParserError> {
28873        let avail_len = __input.len();
28874        let mut payload_buf = [0; Self::ENCODED_LEN];
28875        let mut buf = if avail_len < Self::ENCODED_LEN {
28876            payload_buf[0..avail_len].copy_from_slice(__input);
28877            Bytes::new(&payload_buf)
28878        } else {
28879            Bytes::new(__input)
28880        };
28881        let mut __struct = Self::default();
28882        __struct.time_usec = buf.get_u64_le();
28883        for v in &mut __struct.pos_x {
28884            let val = buf.get_f32_le();
28885            *v = val;
28886        }
28887        for v in &mut __struct.pos_y {
28888            let val = buf.get_f32_le();
28889            *v = val;
28890        }
28891        for v in &mut __struct.pos_z {
28892            let val = buf.get_f32_le();
28893            *v = val;
28894        }
28895        for v in &mut __struct.delta {
28896            let val = buf.get_f32_le();
28897            *v = val;
28898        }
28899        for v in &mut __struct.pos_yaw {
28900            let val = buf.get_f32_le();
28901            *v = val;
28902        }
28903        __struct.valid_points = buf.get_u8();
28904        Ok(__struct)
28905    }
28906    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
28907        let mut __tmp = BytesMut::new(bytes);
28908        #[allow(clippy::absurd_extreme_comparisons)]
28909        #[allow(unused_comparisons)]
28910        if __tmp.remaining() < Self::ENCODED_LEN {
28911            panic!(
28912                "buffer is too small (need {} bytes, but got {})",
28913                Self::ENCODED_LEN,
28914                __tmp.remaining(),
28915            )
28916        }
28917        __tmp.put_u64_le(self.time_usec);
28918        for val in &self.pos_x {
28919            __tmp.put_f32_le(*val);
28920        }
28921        for val in &self.pos_y {
28922            __tmp.put_f32_le(*val);
28923        }
28924        for val in &self.pos_z {
28925            __tmp.put_f32_le(*val);
28926        }
28927        for val in &self.delta {
28928            __tmp.put_f32_le(*val);
28929        }
28930        for val in &self.pos_yaw {
28931            __tmp.put_f32_le(*val);
28932        }
28933        __tmp.put_u8(self.valid_points);
28934        if matches!(version, MavlinkVersion::V2) {
28935            let len = __tmp.len();
28936            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
28937        } else {
28938            __tmp.len()
28939        }
28940    }
28941}
28942#[doc = "id: 332"]
28943#[doc = "Describe a trajectory using an array of up-to 5 waypoints in the local frame (MAV_FRAME_LOCAL_NED)."]
28944#[derive(Debug, Clone, PartialEq)]
28945#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28946#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28947pub struct TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA {
28948    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
28949    pub time_usec: u64,
28950    #[doc = "X-coordinate of waypoint, set to NaN if not being used"]
28951    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28952    pub pos_x: [f32; 5],
28953    #[doc = "Y-coordinate of waypoint, set to NaN if not being used"]
28954    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28955    pub pos_y: [f32; 5],
28956    #[doc = "Z-coordinate of waypoint, set to NaN if not being used"]
28957    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28958    pub pos_z: [f32; 5],
28959    #[doc = "X-velocity of waypoint, set to NaN if not being used"]
28960    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28961    pub vel_x: [f32; 5],
28962    #[doc = "Y-velocity of waypoint, set to NaN if not being used"]
28963    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28964    pub vel_y: [f32; 5],
28965    #[doc = "Z-velocity of waypoint, set to NaN if not being used"]
28966    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28967    pub vel_z: [f32; 5],
28968    #[doc = "X-acceleration of waypoint, set to NaN if not being used"]
28969    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28970    pub acc_x: [f32; 5],
28971    #[doc = "Y-acceleration of waypoint, set to NaN if not being used"]
28972    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28973    pub acc_y: [f32; 5],
28974    #[doc = "Z-acceleration of waypoint, set to NaN if not being used"]
28975    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28976    pub acc_z: [f32; 5],
28977    #[doc = "Yaw angle, set to NaN if not being used"]
28978    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28979    pub pos_yaw: [f32; 5],
28980    #[doc = "Yaw rate, set to NaN if not being used"]
28981    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28982    pub vel_yaw: [f32; 5],
28983    #[doc = "MAV_CMD command id of waypoint, set to UINT16_MAX if not being used."]
28984    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
28985    pub command: [u16; 5],
28986    #[doc = "Number of valid points (up-to 5 waypoints are possible)"]
28987    pub valid_points: u8,
28988}
28989impl TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA {
28990    pub const ENCODED_LEN: usize = 239usize;
28991    pub const DEFAULT: Self = Self {
28992        time_usec: 0_u64,
28993        pos_x: [0.0_f32; 5usize],
28994        pos_y: [0.0_f32; 5usize],
28995        pos_z: [0.0_f32; 5usize],
28996        vel_x: [0.0_f32; 5usize],
28997        vel_y: [0.0_f32; 5usize],
28998        vel_z: [0.0_f32; 5usize],
28999        acc_x: [0.0_f32; 5usize],
29000        acc_y: [0.0_f32; 5usize],
29001        acc_z: [0.0_f32; 5usize],
29002        pos_yaw: [0.0_f32; 5usize],
29003        vel_yaw: [0.0_f32; 5usize],
29004        command: [0_u16; 5usize],
29005        valid_points: 0_u8,
29006    };
29007    #[cfg(feature = "arbitrary")]
29008    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
29009        use arbitrary::{Arbitrary, Unstructured};
29010        let mut buf = [0u8; 1024];
29011        rng.fill_bytes(&mut buf);
29012        let mut unstructured = Unstructured::new(&buf);
29013        Self::arbitrary(&mut unstructured).unwrap_or_default()
29014    }
29015}
29016impl Default for TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA {
29017    fn default() -> Self {
29018        Self::DEFAULT.clone()
29019    }
29020}
29021impl MessageData for TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA {
29022    type Message = MavMessage;
29023    const ID: u32 = 332u32;
29024    const NAME: &'static str = "TRAJECTORY_REPRESENTATION_WAYPOINTS";
29025    const EXTRA_CRC: u8 = 236u8;
29026    const ENCODED_LEN: usize = 239usize;
29027    fn deser(
29028        _version: MavlinkVersion,
29029        __input: &[u8],
29030    ) -> Result<Self, ::mavlink_core::error::ParserError> {
29031        let avail_len = __input.len();
29032        let mut payload_buf = [0; Self::ENCODED_LEN];
29033        let mut buf = if avail_len < Self::ENCODED_LEN {
29034            payload_buf[0..avail_len].copy_from_slice(__input);
29035            Bytes::new(&payload_buf)
29036        } else {
29037            Bytes::new(__input)
29038        };
29039        let mut __struct = Self::default();
29040        __struct.time_usec = buf.get_u64_le();
29041        for v in &mut __struct.pos_x {
29042            let val = buf.get_f32_le();
29043            *v = val;
29044        }
29045        for v in &mut __struct.pos_y {
29046            let val = buf.get_f32_le();
29047            *v = val;
29048        }
29049        for v in &mut __struct.pos_z {
29050            let val = buf.get_f32_le();
29051            *v = val;
29052        }
29053        for v in &mut __struct.vel_x {
29054            let val = buf.get_f32_le();
29055            *v = val;
29056        }
29057        for v in &mut __struct.vel_y {
29058            let val = buf.get_f32_le();
29059            *v = val;
29060        }
29061        for v in &mut __struct.vel_z {
29062            let val = buf.get_f32_le();
29063            *v = val;
29064        }
29065        for v in &mut __struct.acc_x {
29066            let val = buf.get_f32_le();
29067            *v = val;
29068        }
29069        for v in &mut __struct.acc_y {
29070            let val = buf.get_f32_le();
29071            *v = val;
29072        }
29073        for v in &mut __struct.acc_z {
29074            let val = buf.get_f32_le();
29075            *v = val;
29076        }
29077        for v in &mut __struct.pos_yaw {
29078            let val = buf.get_f32_le();
29079            *v = val;
29080        }
29081        for v in &mut __struct.vel_yaw {
29082            let val = buf.get_f32_le();
29083            *v = val;
29084        }
29085        for v in &mut __struct.command {
29086            let val = buf.get_u16_le();
29087            *v = val;
29088        }
29089        __struct.valid_points = buf.get_u8();
29090        Ok(__struct)
29091    }
29092    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
29093        let mut __tmp = BytesMut::new(bytes);
29094        #[allow(clippy::absurd_extreme_comparisons)]
29095        #[allow(unused_comparisons)]
29096        if __tmp.remaining() < Self::ENCODED_LEN {
29097            panic!(
29098                "buffer is too small (need {} bytes, but got {})",
29099                Self::ENCODED_LEN,
29100                __tmp.remaining(),
29101            )
29102        }
29103        __tmp.put_u64_le(self.time_usec);
29104        for val in &self.pos_x {
29105            __tmp.put_f32_le(*val);
29106        }
29107        for val in &self.pos_y {
29108            __tmp.put_f32_le(*val);
29109        }
29110        for val in &self.pos_z {
29111            __tmp.put_f32_le(*val);
29112        }
29113        for val in &self.vel_x {
29114            __tmp.put_f32_le(*val);
29115        }
29116        for val in &self.vel_y {
29117            __tmp.put_f32_le(*val);
29118        }
29119        for val in &self.vel_z {
29120            __tmp.put_f32_le(*val);
29121        }
29122        for val in &self.acc_x {
29123            __tmp.put_f32_le(*val);
29124        }
29125        for val in &self.acc_y {
29126            __tmp.put_f32_le(*val);
29127        }
29128        for val in &self.acc_z {
29129            __tmp.put_f32_le(*val);
29130        }
29131        for val in &self.pos_yaw {
29132            __tmp.put_f32_le(*val);
29133        }
29134        for val in &self.vel_yaw {
29135            __tmp.put_f32_le(*val);
29136        }
29137        for val in &self.command {
29138            __tmp.put_u16_le(*val);
29139        }
29140        __tmp.put_u8(self.valid_points);
29141        if matches!(version, MavlinkVersion::V2) {
29142            let len = __tmp.len();
29143            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
29144        } else {
29145            __tmp.len()
29146        }
29147    }
29148}
29149#[doc = "id: 385"]
29150#[doc = "Message for transporting \"arbitrary\" variable-length data from one component to another (broadcast is not forbidden, but discouraged). The encoding of the data is usually extension specific, i.e. determined by the source, and is usually not documented as part of the MAVLink specification."]
29151#[derive(Debug, Clone, PartialEq)]
29152#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
29153#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29154pub struct TUNNEL_DATA {
29155    #[doc = "A code that identifies the content of the payload (0 for unknown, which is the default). If this code is less than 32768, it is a 'registered' payload type and the corresponding code should be added to the MAV_TUNNEL_PAYLOAD_TYPE enum. Software creators can register blocks of types as needed. Codes greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase."]
29156    pub payload_type: MavTunnelPayloadType,
29157    #[doc = "System ID (can be 0 for broadcast, but this is discouraged)"]
29158    pub target_system: u8,
29159    #[doc = "Component ID (can be 0 for broadcast, but this is discouraged)"]
29160    pub target_component: u8,
29161    #[doc = "Length of the data transported in payload"]
29162    pub payload_length: u8,
29163    #[doc = "Variable length payload. The payload length is defined by payload_length. The entire content of this block is opaque unless you understand the encoding specified by payload_type."]
29164    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
29165    pub payload: [u8; 128],
29166}
29167impl TUNNEL_DATA {
29168    pub const ENCODED_LEN: usize = 133usize;
29169    pub const DEFAULT: Self = Self {
29170        payload_type: MavTunnelPayloadType::DEFAULT,
29171        target_system: 0_u8,
29172        target_component: 0_u8,
29173        payload_length: 0_u8,
29174        payload: [0_u8; 128usize],
29175    };
29176    #[cfg(feature = "arbitrary")]
29177    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
29178        use arbitrary::{Arbitrary, Unstructured};
29179        let mut buf = [0u8; 1024];
29180        rng.fill_bytes(&mut buf);
29181        let mut unstructured = Unstructured::new(&buf);
29182        Self::arbitrary(&mut unstructured).unwrap_or_default()
29183    }
29184}
29185impl Default for TUNNEL_DATA {
29186    fn default() -> Self {
29187        Self::DEFAULT.clone()
29188    }
29189}
29190impl MessageData for TUNNEL_DATA {
29191    type Message = MavMessage;
29192    const ID: u32 = 385u32;
29193    const NAME: &'static str = "TUNNEL";
29194    const EXTRA_CRC: u8 = 147u8;
29195    const ENCODED_LEN: usize = 133usize;
29196    fn deser(
29197        _version: MavlinkVersion,
29198        __input: &[u8],
29199    ) -> Result<Self, ::mavlink_core::error::ParserError> {
29200        let avail_len = __input.len();
29201        let mut payload_buf = [0; Self::ENCODED_LEN];
29202        let mut buf = if avail_len < Self::ENCODED_LEN {
29203            payload_buf[0..avail_len].copy_from_slice(__input);
29204            Bytes::new(&payload_buf)
29205        } else {
29206            Bytes::new(__input)
29207        };
29208        let mut __struct = Self::default();
29209        let tmp = buf.get_u16_le();
29210        __struct.payload_type = FromPrimitive::from_u16(tmp).ok_or(
29211            ::mavlink_core::error::ParserError::InvalidEnum {
29212                enum_type: "MavTunnelPayloadType",
29213                value: tmp as u32,
29214            },
29215        )?;
29216        __struct.target_system = buf.get_u8();
29217        __struct.target_component = buf.get_u8();
29218        __struct.payload_length = buf.get_u8();
29219        for v in &mut __struct.payload {
29220            let val = buf.get_u8();
29221            *v = val;
29222        }
29223        Ok(__struct)
29224    }
29225    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
29226        let mut __tmp = BytesMut::new(bytes);
29227        #[allow(clippy::absurd_extreme_comparisons)]
29228        #[allow(unused_comparisons)]
29229        if __tmp.remaining() < Self::ENCODED_LEN {
29230            panic!(
29231                "buffer is too small (need {} bytes, but got {})",
29232                Self::ENCODED_LEN,
29233                __tmp.remaining(),
29234            )
29235        }
29236        __tmp.put_u16_le(self.payload_type as u16);
29237        __tmp.put_u8(self.target_system);
29238        __tmp.put_u8(self.target_component);
29239        __tmp.put_u8(self.payload_length);
29240        for val in &self.payload {
29241            __tmp.put_u8(*val);
29242        }
29243        if matches!(version, MavlinkVersion::V2) {
29244            let len = __tmp.len();
29245            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
29246        } else {
29247            __tmp.len()
29248        }
29249    }
29250}
29251#[doc = "id: 311"]
29252#[doc = "General information describing a particular UAVCAN node. Please refer to the definition of the UAVCAN service \"uavcan.protocol.GetNodeInfo\" for the background information. This message should be emitted by the system whenever a new node appears online, or an existing node reboots. Additionally, it can be emitted upon request from the other end of the MAVLink channel (see MAV_CMD_UAVCAN_GET_NODE_INFO). It is also not prohibited to emit this message unconditionally at a low frequency. The UAVCAN specification is available at <http://uavcan.org>."]
29253#[derive(Debug, Clone, PartialEq)]
29254#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
29255#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29256pub struct UAVCAN_NODE_INFO_DATA {
29257    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
29258    pub time_usec: u64,
29259    #[doc = "Time since the start-up of the node."]
29260    pub uptime_sec: u32,
29261    #[doc = "Version control system (VCS) revision identifier (e.g. git short commit hash). 0 if unknown."]
29262    pub sw_vcs_commit: u32,
29263    #[doc = "Node name string. For example, \"sapog.px4.io\"."]
29264    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
29265    pub name: [u8; 80],
29266    #[doc = "Hardware major version number."]
29267    pub hw_version_major: u8,
29268    #[doc = "Hardware minor version number."]
29269    pub hw_version_minor: u8,
29270    #[doc = "Hardware unique 128-bit ID."]
29271    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
29272    pub hw_unique_id: [u8; 16],
29273    #[doc = "Software major version number."]
29274    pub sw_version_major: u8,
29275    #[doc = "Software minor version number."]
29276    pub sw_version_minor: u8,
29277}
29278impl UAVCAN_NODE_INFO_DATA {
29279    pub const ENCODED_LEN: usize = 116usize;
29280    pub const DEFAULT: Self = Self {
29281        time_usec: 0_u64,
29282        uptime_sec: 0_u32,
29283        sw_vcs_commit: 0_u32,
29284        name: [0_u8; 80usize],
29285        hw_version_major: 0_u8,
29286        hw_version_minor: 0_u8,
29287        hw_unique_id: [0_u8; 16usize],
29288        sw_version_major: 0_u8,
29289        sw_version_minor: 0_u8,
29290    };
29291    #[cfg(feature = "arbitrary")]
29292    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
29293        use arbitrary::{Arbitrary, Unstructured};
29294        let mut buf = [0u8; 1024];
29295        rng.fill_bytes(&mut buf);
29296        let mut unstructured = Unstructured::new(&buf);
29297        Self::arbitrary(&mut unstructured).unwrap_or_default()
29298    }
29299}
29300impl Default for UAVCAN_NODE_INFO_DATA {
29301    fn default() -> Self {
29302        Self::DEFAULT.clone()
29303    }
29304}
29305impl MessageData for UAVCAN_NODE_INFO_DATA {
29306    type Message = MavMessage;
29307    const ID: u32 = 311u32;
29308    const NAME: &'static str = "UAVCAN_NODE_INFO";
29309    const EXTRA_CRC: u8 = 95u8;
29310    const ENCODED_LEN: usize = 116usize;
29311    fn deser(
29312        _version: MavlinkVersion,
29313        __input: &[u8],
29314    ) -> Result<Self, ::mavlink_core::error::ParserError> {
29315        let avail_len = __input.len();
29316        let mut payload_buf = [0; Self::ENCODED_LEN];
29317        let mut buf = if avail_len < Self::ENCODED_LEN {
29318            payload_buf[0..avail_len].copy_from_slice(__input);
29319            Bytes::new(&payload_buf)
29320        } else {
29321            Bytes::new(__input)
29322        };
29323        let mut __struct = Self::default();
29324        __struct.time_usec = buf.get_u64_le();
29325        __struct.uptime_sec = buf.get_u32_le();
29326        __struct.sw_vcs_commit = buf.get_u32_le();
29327        for v in &mut __struct.name {
29328            let val = buf.get_u8();
29329            *v = val;
29330        }
29331        __struct.hw_version_major = buf.get_u8();
29332        __struct.hw_version_minor = buf.get_u8();
29333        for v in &mut __struct.hw_unique_id {
29334            let val = buf.get_u8();
29335            *v = val;
29336        }
29337        __struct.sw_version_major = buf.get_u8();
29338        __struct.sw_version_minor = buf.get_u8();
29339        Ok(__struct)
29340    }
29341    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
29342        let mut __tmp = BytesMut::new(bytes);
29343        #[allow(clippy::absurd_extreme_comparisons)]
29344        #[allow(unused_comparisons)]
29345        if __tmp.remaining() < Self::ENCODED_LEN {
29346            panic!(
29347                "buffer is too small (need {} bytes, but got {})",
29348                Self::ENCODED_LEN,
29349                __tmp.remaining(),
29350            )
29351        }
29352        __tmp.put_u64_le(self.time_usec);
29353        __tmp.put_u32_le(self.uptime_sec);
29354        __tmp.put_u32_le(self.sw_vcs_commit);
29355        for val in &self.name {
29356            __tmp.put_u8(*val);
29357        }
29358        __tmp.put_u8(self.hw_version_major);
29359        __tmp.put_u8(self.hw_version_minor);
29360        for val in &self.hw_unique_id {
29361            __tmp.put_u8(*val);
29362        }
29363        __tmp.put_u8(self.sw_version_major);
29364        __tmp.put_u8(self.sw_version_minor);
29365        if matches!(version, MavlinkVersion::V2) {
29366            let len = __tmp.len();
29367            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
29368        } else {
29369            __tmp.len()
29370        }
29371    }
29372}
29373#[doc = "id: 310"]
29374#[doc = "General status information of an UAVCAN node. Please refer to the definition of the UAVCAN message \"uavcan.protocol.NodeStatus\" for the background information. The UAVCAN specification is available at <http://uavcan.org>."]
29375#[derive(Debug, Clone, PartialEq)]
29376#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
29377#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29378pub struct UAVCAN_NODE_STATUS_DATA {
29379    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
29380    pub time_usec: u64,
29381    #[doc = "Time since the start-up of the node."]
29382    pub uptime_sec: u32,
29383    #[doc = "Vendor-specific status information."]
29384    pub vendor_specific_status_code: u16,
29385    #[doc = "Generalized node health status."]
29386    pub health: UavcanNodeHealth,
29387    #[doc = "Generalized operating mode."]
29388    pub mode: UavcanNodeMode,
29389    #[doc = "Not used currently."]
29390    pub sub_mode: u8,
29391}
29392impl UAVCAN_NODE_STATUS_DATA {
29393    pub const ENCODED_LEN: usize = 17usize;
29394    pub const DEFAULT: Self = Self {
29395        time_usec: 0_u64,
29396        uptime_sec: 0_u32,
29397        vendor_specific_status_code: 0_u16,
29398        health: UavcanNodeHealth::DEFAULT,
29399        mode: UavcanNodeMode::DEFAULT,
29400        sub_mode: 0_u8,
29401    };
29402    #[cfg(feature = "arbitrary")]
29403    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
29404        use arbitrary::{Arbitrary, Unstructured};
29405        let mut buf = [0u8; 1024];
29406        rng.fill_bytes(&mut buf);
29407        let mut unstructured = Unstructured::new(&buf);
29408        Self::arbitrary(&mut unstructured).unwrap_or_default()
29409    }
29410}
29411impl Default for UAVCAN_NODE_STATUS_DATA {
29412    fn default() -> Self {
29413        Self::DEFAULT.clone()
29414    }
29415}
29416impl MessageData for UAVCAN_NODE_STATUS_DATA {
29417    type Message = MavMessage;
29418    const ID: u32 = 310u32;
29419    const NAME: &'static str = "UAVCAN_NODE_STATUS";
29420    const EXTRA_CRC: u8 = 28u8;
29421    const ENCODED_LEN: usize = 17usize;
29422    fn deser(
29423        _version: MavlinkVersion,
29424        __input: &[u8],
29425    ) -> Result<Self, ::mavlink_core::error::ParserError> {
29426        let avail_len = __input.len();
29427        let mut payload_buf = [0; Self::ENCODED_LEN];
29428        let mut buf = if avail_len < Self::ENCODED_LEN {
29429            payload_buf[0..avail_len].copy_from_slice(__input);
29430            Bytes::new(&payload_buf)
29431        } else {
29432            Bytes::new(__input)
29433        };
29434        let mut __struct = Self::default();
29435        __struct.time_usec = buf.get_u64_le();
29436        __struct.uptime_sec = buf.get_u32_le();
29437        __struct.vendor_specific_status_code = buf.get_u16_le();
29438        let tmp = buf.get_u8();
29439        __struct.health =
29440            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
29441                enum_type: "UavcanNodeHealth",
29442                value: tmp as u32,
29443            })?;
29444        let tmp = buf.get_u8();
29445        __struct.mode =
29446            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
29447                enum_type: "UavcanNodeMode",
29448                value: tmp as u32,
29449            })?;
29450        __struct.sub_mode = buf.get_u8();
29451        Ok(__struct)
29452    }
29453    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
29454        let mut __tmp = BytesMut::new(bytes);
29455        #[allow(clippy::absurd_extreme_comparisons)]
29456        #[allow(unused_comparisons)]
29457        if __tmp.remaining() < Self::ENCODED_LEN {
29458            panic!(
29459                "buffer is too small (need {} bytes, but got {})",
29460                Self::ENCODED_LEN,
29461                __tmp.remaining(),
29462            )
29463        }
29464        __tmp.put_u64_le(self.time_usec);
29465        __tmp.put_u32_le(self.uptime_sec);
29466        __tmp.put_u16_le(self.vendor_specific_status_code);
29467        __tmp.put_u8(self.health as u8);
29468        __tmp.put_u8(self.mode as u8);
29469        __tmp.put_u8(self.sub_mode);
29470        if matches!(version, MavlinkVersion::V2) {
29471            let len = __tmp.len();
29472            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
29473        } else {
29474            __tmp.len()
29475        }
29476    }
29477}
29478#[doc = "id: 340"]
29479#[doc = "The global position resulting from GPS and sensor fusion."]
29480#[derive(Debug, Clone, PartialEq)]
29481#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
29482#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29483pub struct UTM_GLOBAL_POSITION_DATA {
29484    #[doc = "Time of applicability of position (microseconds since UNIX epoch)."]
29485    pub time: u64,
29486    #[doc = "Latitude (WGS84)"]
29487    pub lat: i32,
29488    #[doc = "Longitude (WGS84)"]
29489    pub lon: i32,
29490    #[doc = "Altitude (WGS84)"]
29491    pub alt: i32,
29492    #[doc = "Altitude above ground"]
29493    pub relative_alt: i32,
29494    #[doc = "Next waypoint, latitude (WGS84)"]
29495    pub next_lat: i32,
29496    #[doc = "Next waypoint, longitude (WGS84)"]
29497    pub next_lon: i32,
29498    #[doc = "Next waypoint, altitude (WGS84)"]
29499    pub next_alt: i32,
29500    #[doc = "Ground X speed (latitude, positive north)"]
29501    pub vx: i16,
29502    #[doc = "Ground Y speed (longitude, positive east)"]
29503    pub vy: i16,
29504    #[doc = "Ground Z speed (altitude, positive down)"]
29505    pub vz: i16,
29506    #[doc = "Horizontal position uncertainty (standard deviation)"]
29507    pub h_acc: u16,
29508    #[doc = "Altitude uncertainty (standard deviation)"]
29509    pub v_acc: u16,
29510    #[doc = "Speed uncertainty (standard deviation)"]
29511    pub vel_acc: u16,
29512    #[doc = "Time until next update. Set to 0 if unknown or in data driven mode."]
29513    pub update_rate: u16,
29514    #[doc = "Unique UAS ID."]
29515    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
29516    pub uas_id: [u8; 18],
29517    #[doc = "Flight state"]
29518    pub flight_state: UtmFlightState,
29519    #[doc = "Bitwise OR combination of the data available flags."]
29520    pub flags: UtmDataAvailFlags,
29521}
29522impl UTM_GLOBAL_POSITION_DATA {
29523    pub const ENCODED_LEN: usize = 70usize;
29524    pub const DEFAULT: Self = Self {
29525        time: 0_u64,
29526        lat: 0_i32,
29527        lon: 0_i32,
29528        alt: 0_i32,
29529        relative_alt: 0_i32,
29530        next_lat: 0_i32,
29531        next_lon: 0_i32,
29532        next_alt: 0_i32,
29533        vx: 0_i16,
29534        vy: 0_i16,
29535        vz: 0_i16,
29536        h_acc: 0_u16,
29537        v_acc: 0_u16,
29538        vel_acc: 0_u16,
29539        update_rate: 0_u16,
29540        uas_id: [0_u8; 18usize],
29541        flight_state: UtmFlightState::DEFAULT,
29542        flags: UtmDataAvailFlags::DEFAULT,
29543    };
29544    #[cfg(feature = "arbitrary")]
29545    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
29546        use arbitrary::{Arbitrary, Unstructured};
29547        let mut buf = [0u8; 1024];
29548        rng.fill_bytes(&mut buf);
29549        let mut unstructured = Unstructured::new(&buf);
29550        Self::arbitrary(&mut unstructured).unwrap_or_default()
29551    }
29552}
29553impl Default for UTM_GLOBAL_POSITION_DATA {
29554    fn default() -> Self {
29555        Self::DEFAULT.clone()
29556    }
29557}
29558impl MessageData for UTM_GLOBAL_POSITION_DATA {
29559    type Message = MavMessage;
29560    const ID: u32 = 340u32;
29561    const NAME: &'static str = "UTM_GLOBAL_POSITION";
29562    const EXTRA_CRC: u8 = 99u8;
29563    const ENCODED_LEN: usize = 70usize;
29564    fn deser(
29565        _version: MavlinkVersion,
29566        __input: &[u8],
29567    ) -> Result<Self, ::mavlink_core::error::ParserError> {
29568        let avail_len = __input.len();
29569        let mut payload_buf = [0; Self::ENCODED_LEN];
29570        let mut buf = if avail_len < Self::ENCODED_LEN {
29571            payload_buf[0..avail_len].copy_from_slice(__input);
29572            Bytes::new(&payload_buf)
29573        } else {
29574            Bytes::new(__input)
29575        };
29576        let mut __struct = Self::default();
29577        __struct.time = buf.get_u64_le();
29578        __struct.lat = buf.get_i32_le();
29579        __struct.lon = buf.get_i32_le();
29580        __struct.alt = buf.get_i32_le();
29581        __struct.relative_alt = buf.get_i32_le();
29582        __struct.next_lat = buf.get_i32_le();
29583        __struct.next_lon = buf.get_i32_le();
29584        __struct.next_alt = buf.get_i32_le();
29585        __struct.vx = buf.get_i16_le();
29586        __struct.vy = buf.get_i16_le();
29587        __struct.vz = buf.get_i16_le();
29588        __struct.h_acc = buf.get_u16_le();
29589        __struct.v_acc = buf.get_u16_le();
29590        __struct.vel_acc = buf.get_u16_le();
29591        __struct.update_rate = buf.get_u16_le();
29592        for v in &mut __struct.uas_id {
29593            let val = buf.get_u8();
29594            *v = val;
29595        }
29596        let tmp = buf.get_u8();
29597        __struct.flight_state =
29598            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
29599                enum_type: "UtmFlightState",
29600                value: tmp as u32,
29601            })?;
29602        let tmp = buf.get_u8();
29603        __struct.flags = UtmDataAvailFlags::from_bits(tmp & UtmDataAvailFlags::all().bits())
29604            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
29605                flag_type: "UtmDataAvailFlags",
29606                value: tmp as u32,
29607            })?;
29608        Ok(__struct)
29609    }
29610    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
29611        let mut __tmp = BytesMut::new(bytes);
29612        #[allow(clippy::absurd_extreme_comparisons)]
29613        #[allow(unused_comparisons)]
29614        if __tmp.remaining() < Self::ENCODED_LEN {
29615            panic!(
29616                "buffer is too small (need {} bytes, but got {})",
29617                Self::ENCODED_LEN,
29618                __tmp.remaining(),
29619            )
29620        }
29621        __tmp.put_u64_le(self.time);
29622        __tmp.put_i32_le(self.lat);
29623        __tmp.put_i32_le(self.lon);
29624        __tmp.put_i32_le(self.alt);
29625        __tmp.put_i32_le(self.relative_alt);
29626        __tmp.put_i32_le(self.next_lat);
29627        __tmp.put_i32_le(self.next_lon);
29628        __tmp.put_i32_le(self.next_alt);
29629        __tmp.put_i16_le(self.vx);
29630        __tmp.put_i16_le(self.vy);
29631        __tmp.put_i16_le(self.vz);
29632        __tmp.put_u16_le(self.h_acc);
29633        __tmp.put_u16_le(self.v_acc);
29634        __tmp.put_u16_le(self.vel_acc);
29635        __tmp.put_u16_le(self.update_rate);
29636        for val in &self.uas_id {
29637            __tmp.put_u8(*val);
29638        }
29639        __tmp.put_u8(self.flight_state as u8);
29640        __tmp.put_u8(self.flags.bits());
29641        if matches!(version, MavlinkVersion::V2) {
29642            let len = __tmp.len();
29643            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
29644        } else {
29645            __tmp.len()
29646        }
29647    }
29648}
29649#[doc = "id: 248"]
29650#[doc = "Message implementing parts of the V2 payload specs in V1 frames for transitional support."]
29651#[derive(Debug, Clone, PartialEq)]
29652#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
29653#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29654pub struct V2_EXTENSION_DATA {
29655    #[doc = "A code that identifies the software component that understands this message (analogous to USB device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to <https://github.com/mavlink/mavlink/definition_files/extension_message_ids.xml>. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase."]
29656    pub message_type: u16,
29657    #[doc = "Network ID (0 for broadcast)"]
29658    pub target_network: u8,
29659    #[doc = "System ID (0 for broadcast)"]
29660    pub target_system: u8,
29661    #[doc = "Component ID (0 for broadcast)"]
29662    pub target_component: u8,
29663    #[doc = "Variable length payload. The length must be encoded in the payload as part of the message_type protocol, e.g. by including the length as payload data, or by terminating the payload data with a non-zero marker. This is required in order to reconstruct zero-terminated payloads that are (or otherwise would be) trimmed by MAVLink 2 empty-byte truncation. The entire content of the payload block is opaque unless you understand the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the MAVLink specification."]
29664    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
29665    pub payload: [u8; 249],
29666}
29667impl V2_EXTENSION_DATA {
29668    pub const ENCODED_LEN: usize = 254usize;
29669    pub const DEFAULT: Self = Self {
29670        message_type: 0_u16,
29671        target_network: 0_u8,
29672        target_system: 0_u8,
29673        target_component: 0_u8,
29674        payload: [0_u8; 249usize],
29675    };
29676    #[cfg(feature = "arbitrary")]
29677    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
29678        use arbitrary::{Arbitrary, Unstructured};
29679        let mut buf = [0u8; 1024];
29680        rng.fill_bytes(&mut buf);
29681        let mut unstructured = Unstructured::new(&buf);
29682        Self::arbitrary(&mut unstructured).unwrap_or_default()
29683    }
29684}
29685impl Default for V2_EXTENSION_DATA {
29686    fn default() -> Self {
29687        Self::DEFAULT.clone()
29688    }
29689}
29690impl MessageData for V2_EXTENSION_DATA {
29691    type Message = MavMessage;
29692    const ID: u32 = 248u32;
29693    const NAME: &'static str = "V2_EXTENSION";
29694    const EXTRA_CRC: u8 = 8u8;
29695    const ENCODED_LEN: usize = 254usize;
29696    fn deser(
29697        _version: MavlinkVersion,
29698        __input: &[u8],
29699    ) -> Result<Self, ::mavlink_core::error::ParserError> {
29700        let avail_len = __input.len();
29701        let mut payload_buf = [0; Self::ENCODED_LEN];
29702        let mut buf = if avail_len < Self::ENCODED_LEN {
29703            payload_buf[0..avail_len].copy_from_slice(__input);
29704            Bytes::new(&payload_buf)
29705        } else {
29706            Bytes::new(__input)
29707        };
29708        let mut __struct = Self::default();
29709        __struct.message_type = buf.get_u16_le();
29710        __struct.target_network = buf.get_u8();
29711        __struct.target_system = buf.get_u8();
29712        __struct.target_component = buf.get_u8();
29713        for v in &mut __struct.payload {
29714            let val = buf.get_u8();
29715            *v = val;
29716        }
29717        Ok(__struct)
29718    }
29719    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
29720        let mut __tmp = BytesMut::new(bytes);
29721        #[allow(clippy::absurd_extreme_comparisons)]
29722        #[allow(unused_comparisons)]
29723        if __tmp.remaining() < Self::ENCODED_LEN {
29724            panic!(
29725                "buffer is too small (need {} bytes, but got {})",
29726                Self::ENCODED_LEN,
29727                __tmp.remaining(),
29728            )
29729        }
29730        __tmp.put_u16_le(self.message_type);
29731        __tmp.put_u8(self.target_network);
29732        __tmp.put_u8(self.target_system);
29733        __tmp.put_u8(self.target_component);
29734        for val in &self.payload {
29735            __tmp.put_u8(*val);
29736        }
29737        if matches!(version, MavlinkVersion::V2) {
29738            let len = __tmp.len();
29739            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
29740        } else {
29741            __tmp.len()
29742        }
29743    }
29744}
29745#[doc = "id: 74"]
29746#[doc = "Metrics typically displayed on a HUD for fixed wing aircraft."]
29747#[derive(Debug, Clone, PartialEq)]
29748#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
29749#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29750pub struct VFR_HUD_DATA {
29751    #[doc = "Vehicle speed in form appropriate for vehicle type. For standard aircraft this is typically calibrated airspeed (CAS) or indicated airspeed (IAS) - either of which can be used by a pilot to estimate stall speed."]
29752    pub airspeed: f32,
29753    #[doc = "Current ground speed."]
29754    pub groundspeed: f32,
29755    #[doc = "Current altitude (MSL)."]
29756    pub alt: f32,
29757    #[doc = "Current climb rate."]
29758    pub climb: f32,
29759    #[doc = "Current heading in compass units (0-360, 0=north)."]
29760    pub heading: i16,
29761    #[doc = "Current throttle setting (0 to 100)."]
29762    pub throttle: u16,
29763}
29764impl VFR_HUD_DATA {
29765    pub const ENCODED_LEN: usize = 20usize;
29766    pub const DEFAULT: Self = Self {
29767        airspeed: 0.0_f32,
29768        groundspeed: 0.0_f32,
29769        alt: 0.0_f32,
29770        climb: 0.0_f32,
29771        heading: 0_i16,
29772        throttle: 0_u16,
29773    };
29774    #[cfg(feature = "arbitrary")]
29775    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
29776        use arbitrary::{Arbitrary, Unstructured};
29777        let mut buf = [0u8; 1024];
29778        rng.fill_bytes(&mut buf);
29779        let mut unstructured = Unstructured::new(&buf);
29780        Self::arbitrary(&mut unstructured).unwrap_or_default()
29781    }
29782}
29783impl Default for VFR_HUD_DATA {
29784    fn default() -> Self {
29785        Self::DEFAULT.clone()
29786    }
29787}
29788impl MessageData for VFR_HUD_DATA {
29789    type Message = MavMessage;
29790    const ID: u32 = 74u32;
29791    const NAME: &'static str = "VFR_HUD";
29792    const EXTRA_CRC: u8 = 20u8;
29793    const ENCODED_LEN: usize = 20usize;
29794    fn deser(
29795        _version: MavlinkVersion,
29796        __input: &[u8],
29797    ) -> Result<Self, ::mavlink_core::error::ParserError> {
29798        let avail_len = __input.len();
29799        let mut payload_buf = [0; Self::ENCODED_LEN];
29800        let mut buf = if avail_len < Self::ENCODED_LEN {
29801            payload_buf[0..avail_len].copy_from_slice(__input);
29802            Bytes::new(&payload_buf)
29803        } else {
29804            Bytes::new(__input)
29805        };
29806        let mut __struct = Self::default();
29807        __struct.airspeed = buf.get_f32_le();
29808        __struct.groundspeed = buf.get_f32_le();
29809        __struct.alt = buf.get_f32_le();
29810        __struct.climb = buf.get_f32_le();
29811        __struct.heading = buf.get_i16_le();
29812        __struct.throttle = buf.get_u16_le();
29813        Ok(__struct)
29814    }
29815    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
29816        let mut __tmp = BytesMut::new(bytes);
29817        #[allow(clippy::absurd_extreme_comparisons)]
29818        #[allow(unused_comparisons)]
29819        if __tmp.remaining() < Self::ENCODED_LEN {
29820            panic!(
29821                "buffer is too small (need {} bytes, but got {})",
29822                Self::ENCODED_LEN,
29823                __tmp.remaining(),
29824            )
29825        }
29826        __tmp.put_f32_le(self.airspeed);
29827        __tmp.put_f32_le(self.groundspeed);
29828        __tmp.put_f32_le(self.alt);
29829        __tmp.put_f32_le(self.climb);
29830        __tmp.put_i16_le(self.heading);
29831        __tmp.put_u16_le(self.throttle);
29832        if matches!(version, MavlinkVersion::V2) {
29833            let len = __tmp.len();
29834            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
29835        } else {
29836            __tmp.len()
29837        }
29838    }
29839}
29840#[doc = "id: 241"]
29841#[doc = "Vibration levels and accelerometer clipping."]
29842#[derive(Debug, Clone, PartialEq)]
29843#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
29844#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29845pub struct VIBRATION_DATA {
29846    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
29847    pub time_usec: u64,
29848    #[doc = "Vibration levels on X-axis"]
29849    pub vibration_x: f32,
29850    #[doc = "Vibration levels on Y-axis"]
29851    pub vibration_y: f32,
29852    #[doc = "Vibration levels on Z-axis"]
29853    pub vibration_z: f32,
29854    #[doc = "first accelerometer clipping count"]
29855    pub clipping_0: u32,
29856    #[doc = "second accelerometer clipping count"]
29857    pub clipping_1: u32,
29858    #[doc = "third accelerometer clipping count"]
29859    pub clipping_2: u32,
29860}
29861impl VIBRATION_DATA {
29862    pub const ENCODED_LEN: usize = 32usize;
29863    pub const DEFAULT: Self = Self {
29864        time_usec: 0_u64,
29865        vibration_x: 0.0_f32,
29866        vibration_y: 0.0_f32,
29867        vibration_z: 0.0_f32,
29868        clipping_0: 0_u32,
29869        clipping_1: 0_u32,
29870        clipping_2: 0_u32,
29871    };
29872    #[cfg(feature = "arbitrary")]
29873    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
29874        use arbitrary::{Arbitrary, Unstructured};
29875        let mut buf = [0u8; 1024];
29876        rng.fill_bytes(&mut buf);
29877        let mut unstructured = Unstructured::new(&buf);
29878        Self::arbitrary(&mut unstructured).unwrap_or_default()
29879    }
29880}
29881impl Default for VIBRATION_DATA {
29882    fn default() -> Self {
29883        Self::DEFAULT.clone()
29884    }
29885}
29886impl MessageData for VIBRATION_DATA {
29887    type Message = MavMessage;
29888    const ID: u32 = 241u32;
29889    const NAME: &'static str = "VIBRATION";
29890    const EXTRA_CRC: u8 = 90u8;
29891    const ENCODED_LEN: usize = 32usize;
29892    fn deser(
29893        _version: MavlinkVersion,
29894        __input: &[u8],
29895    ) -> Result<Self, ::mavlink_core::error::ParserError> {
29896        let avail_len = __input.len();
29897        let mut payload_buf = [0; Self::ENCODED_LEN];
29898        let mut buf = if avail_len < Self::ENCODED_LEN {
29899            payload_buf[0..avail_len].copy_from_slice(__input);
29900            Bytes::new(&payload_buf)
29901        } else {
29902            Bytes::new(__input)
29903        };
29904        let mut __struct = Self::default();
29905        __struct.time_usec = buf.get_u64_le();
29906        __struct.vibration_x = buf.get_f32_le();
29907        __struct.vibration_y = buf.get_f32_le();
29908        __struct.vibration_z = buf.get_f32_le();
29909        __struct.clipping_0 = buf.get_u32_le();
29910        __struct.clipping_1 = buf.get_u32_le();
29911        __struct.clipping_2 = buf.get_u32_le();
29912        Ok(__struct)
29913    }
29914    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
29915        let mut __tmp = BytesMut::new(bytes);
29916        #[allow(clippy::absurd_extreme_comparisons)]
29917        #[allow(unused_comparisons)]
29918        if __tmp.remaining() < Self::ENCODED_LEN {
29919            panic!(
29920                "buffer is too small (need {} bytes, but got {})",
29921                Self::ENCODED_LEN,
29922                __tmp.remaining(),
29923            )
29924        }
29925        __tmp.put_u64_le(self.time_usec);
29926        __tmp.put_f32_le(self.vibration_x);
29927        __tmp.put_f32_le(self.vibration_y);
29928        __tmp.put_f32_le(self.vibration_z);
29929        __tmp.put_u32_le(self.clipping_0);
29930        __tmp.put_u32_le(self.clipping_1);
29931        __tmp.put_u32_le(self.clipping_2);
29932        if matches!(version, MavlinkVersion::V2) {
29933            let len = __tmp.len();
29934            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
29935        } else {
29936            __tmp.len()
29937        }
29938    }
29939}
29940#[doc = "id: 104"]
29941#[doc = "Global position estimate from a Vicon motion system source."]
29942#[derive(Debug, Clone, PartialEq)]
29943#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
29944#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29945pub struct VICON_POSITION_ESTIMATE_DATA {
29946    #[doc = "Timestamp (UNIX time or time since system boot)"]
29947    pub usec: u64,
29948    #[doc = "Global X position"]
29949    pub x: f32,
29950    #[doc = "Global Y position"]
29951    pub y: f32,
29952    #[doc = "Global Z position"]
29953    pub z: f32,
29954    #[doc = "Roll angle"]
29955    pub roll: f32,
29956    #[doc = "Pitch angle"]
29957    pub pitch: f32,
29958    #[doc = "Yaw angle"]
29959    pub yaw: f32,
29960    #[doc = "Row-major representation of 6x6 pose cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array."]
29961    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
29962    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
29963    pub covariance: [f32; 21],
29964}
29965impl VICON_POSITION_ESTIMATE_DATA {
29966    pub const ENCODED_LEN: usize = 116usize;
29967    pub const DEFAULT: Self = Self {
29968        usec: 0_u64,
29969        x: 0.0_f32,
29970        y: 0.0_f32,
29971        z: 0.0_f32,
29972        roll: 0.0_f32,
29973        pitch: 0.0_f32,
29974        yaw: 0.0_f32,
29975        covariance: [0.0_f32; 21usize],
29976    };
29977    #[cfg(feature = "arbitrary")]
29978    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
29979        use arbitrary::{Arbitrary, Unstructured};
29980        let mut buf = [0u8; 1024];
29981        rng.fill_bytes(&mut buf);
29982        let mut unstructured = Unstructured::new(&buf);
29983        Self::arbitrary(&mut unstructured).unwrap_or_default()
29984    }
29985}
29986impl Default for VICON_POSITION_ESTIMATE_DATA {
29987    fn default() -> Self {
29988        Self::DEFAULT.clone()
29989    }
29990}
29991impl MessageData for VICON_POSITION_ESTIMATE_DATA {
29992    type Message = MavMessage;
29993    const ID: u32 = 104u32;
29994    const NAME: &'static str = "VICON_POSITION_ESTIMATE";
29995    const EXTRA_CRC: u8 = 56u8;
29996    const ENCODED_LEN: usize = 116usize;
29997    fn deser(
29998        _version: MavlinkVersion,
29999        __input: &[u8],
30000    ) -> Result<Self, ::mavlink_core::error::ParserError> {
30001        let avail_len = __input.len();
30002        let mut payload_buf = [0; Self::ENCODED_LEN];
30003        let mut buf = if avail_len < Self::ENCODED_LEN {
30004            payload_buf[0..avail_len].copy_from_slice(__input);
30005            Bytes::new(&payload_buf)
30006        } else {
30007            Bytes::new(__input)
30008        };
30009        let mut __struct = Self::default();
30010        __struct.usec = buf.get_u64_le();
30011        __struct.x = buf.get_f32_le();
30012        __struct.y = buf.get_f32_le();
30013        __struct.z = buf.get_f32_le();
30014        __struct.roll = buf.get_f32_le();
30015        __struct.pitch = buf.get_f32_le();
30016        __struct.yaw = buf.get_f32_le();
30017        for v in &mut __struct.covariance {
30018            let val = buf.get_f32_le();
30019            *v = val;
30020        }
30021        Ok(__struct)
30022    }
30023    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
30024        let mut __tmp = BytesMut::new(bytes);
30025        #[allow(clippy::absurd_extreme_comparisons)]
30026        #[allow(unused_comparisons)]
30027        if __tmp.remaining() < Self::ENCODED_LEN {
30028            panic!(
30029                "buffer is too small (need {} bytes, but got {})",
30030                Self::ENCODED_LEN,
30031                __tmp.remaining(),
30032            )
30033        }
30034        __tmp.put_u64_le(self.usec);
30035        __tmp.put_f32_le(self.x);
30036        __tmp.put_f32_le(self.y);
30037        __tmp.put_f32_le(self.z);
30038        __tmp.put_f32_le(self.roll);
30039        __tmp.put_f32_le(self.pitch);
30040        __tmp.put_f32_le(self.yaw);
30041        for val in &self.covariance {
30042            __tmp.put_f32_le(*val);
30043        }
30044        if matches!(version, MavlinkVersion::V2) {
30045            let len = __tmp.len();
30046            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
30047        } else {
30048            __tmp.len()
30049        }
30050    }
30051}
30052#[doc = "id: 269"]
30053#[doc = "Information about video stream. It may be requested using MAV_CMD_REQUEST_MESSAGE, where param2 indicates the video stream id: 0 for all streams, 1 for first, 2 for second, etc."]
30054#[derive(Debug, Clone, PartialEq)]
30055#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
30056#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30057pub struct VIDEO_STREAM_INFORMATION_DATA {
30058    #[doc = "Frame rate."]
30059    pub framerate: f32,
30060    #[doc = "Bit rate."]
30061    pub bitrate: u32,
30062    #[doc = "Bitmap of stream status flags."]
30063    pub flags: VideoStreamStatusFlags,
30064    #[doc = "Horizontal resolution."]
30065    pub resolution_h: u16,
30066    #[doc = "Vertical resolution."]
30067    pub resolution_v: u16,
30068    #[doc = "Video image rotation clockwise."]
30069    pub rotation: u16,
30070    #[doc = "Horizontal Field of view."]
30071    pub hfov: u16,
30072    #[doc = "Video Stream ID (1 for first, 2 for second, etc.)"]
30073    pub stream_id: u8,
30074    #[doc = "Number of streams available."]
30075    pub count: u8,
30076    #[doc = "Type of stream."]
30077    pub mavtype: VideoStreamType,
30078    #[doc = "Stream name."]
30079    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
30080    pub name: [u8; 32],
30081    #[doc = "Video stream URI (TCP or RTSP URI ground station should connect to) or port number (UDP port ground station should listen to)."]
30082    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
30083    pub uri: [u8; 160],
30084    #[doc = "Encoding of stream."]
30085    #[cfg_attr(feature = "serde", serde(default))]
30086    pub encoding: VideoStreamEncoding,
30087    #[doc = "Camera id of a non-MAVLink camera attached to an autopilot (1-6).  0 if the component is a MAVLink camera (with its own component id)."]
30088    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
30089    pub camera_device_id: u8,
30090}
30091impl VIDEO_STREAM_INFORMATION_DATA {
30092    pub const ENCODED_LEN: usize = 215usize;
30093    pub const DEFAULT: Self = Self {
30094        framerate: 0.0_f32,
30095        bitrate: 0_u32,
30096        flags: VideoStreamStatusFlags::DEFAULT,
30097        resolution_h: 0_u16,
30098        resolution_v: 0_u16,
30099        rotation: 0_u16,
30100        hfov: 0_u16,
30101        stream_id: 0_u8,
30102        count: 0_u8,
30103        mavtype: VideoStreamType::DEFAULT,
30104        name: [0_u8; 32usize],
30105        uri: [0_u8; 160usize],
30106        encoding: VideoStreamEncoding::DEFAULT,
30107        camera_device_id: 0_u8,
30108    };
30109    #[cfg(feature = "arbitrary")]
30110    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
30111        use arbitrary::{Arbitrary, Unstructured};
30112        let mut buf = [0u8; 1024];
30113        rng.fill_bytes(&mut buf);
30114        let mut unstructured = Unstructured::new(&buf);
30115        Self::arbitrary(&mut unstructured).unwrap_or_default()
30116    }
30117}
30118impl Default for VIDEO_STREAM_INFORMATION_DATA {
30119    fn default() -> Self {
30120        Self::DEFAULT.clone()
30121    }
30122}
30123impl MessageData for VIDEO_STREAM_INFORMATION_DATA {
30124    type Message = MavMessage;
30125    const ID: u32 = 269u32;
30126    const NAME: &'static str = "VIDEO_STREAM_INFORMATION";
30127    const EXTRA_CRC: u8 = 109u8;
30128    const ENCODED_LEN: usize = 215usize;
30129    fn deser(
30130        _version: MavlinkVersion,
30131        __input: &[u8],
30132    ) -> Result<Self, ::mavlink_core::error::ParserError> {
30133        let avail_len = __input.len();
30134        let mut payload_buf = [0; Self::ENCODED_LEN];
30135        let mut buf = if avail_len < Self::ENCODED_LEN {
30136            payload_buf[0..avail_len].copy_from_slice(__input);
30137            Bytes::new(&payload_buf)
30138        } else {
30139            Bytes::new(__input)
30140        };
30141        let mut __struct = Self::default();
30142        __struct.framerate = buf.get_f32_le();
30143        __struct.bitrate = buf.get_u32_le();
30144        let tmp = buf.get_u16_le();
30145        __struct.flags = VideoStreamStatusFlags::from_bits(
30146            tmp & VideoStreamStatusFlags::all().bits(),
30147        )
30148        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
30149            flag_type: "VideoStreamStatusFlags",
30150            value: tmp as u32,
30151        })?;
30152        __struct.resolution_h = buf.get_u16_le();
30153        __struct.resolution_v = buf.get_u16_le();
30154        __struct.rotation = buf.get_u16_le();
30155        __struct.hfov = buf.get_u16_le();
30156        __struct.stream_id = buf.get_u8();
30157        __struct.count = buf.get_u8();
30158        let tmp = buf.get_u8();
30159        __struct.mavtype =
30160            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
30161                enum_type: "VideoStreamType",
30162                value: tmp as u32,
30163            })?;
30164        for v in &mut __struct.name {
30165            let val = buf.get_u8();
30166            *v = val;
30167        }
30168        for v in &mut __struct.uri {
30169            let val = buf.get_u8();
30170            *v = val;
30171        }
30172        let tmp = buf.get_u8();
30173        __struct.encoding =
30174            FromPrimitive::from_u8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
30175                enum_type: "VideoStreamEncoding",
30176                value: tmp as u32,
30177            })?;
30178        __struct.camera_device_id = buf.get_u8();
30179        Ok(__struct)
30180    }
30181    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
30182        let mut __tmp = BytesMut::new(bytes);
30183        #[allow(clippy::absurd_extreme_comparisons)]
30184        #[allow(unused_comparisons)]
30185        if __tmp.remaining() < Self::ENCODED_LEN {
30186            panic!(
30187                "buffer is too small (need {} bytes, but got {})",
30188                Self::ENCODED_LEN,
30189                __tmp.remaining(),
30190            )
30191        }
30192        __tmp.put_f32_le(self.framerate);
30193        __tmp.put_u32_le(self.bitrate);
30194        __tmp.put_u16_le(self.flags.bits());
30195        __tmp.put_u16_le(self.resolution_h);
30196        __tmp.put_u16_le(self.resolution_v);
30197        __tmp.put_u16_le(self.rotation);
30198        __tmp.put_u16_le(self.hfov);
30199        __tmp.put_u8(self.stream_id);
30200        __tmp.put_u8(self.count);
30201        __tmp.put_u8(self.mavtype as u8);
30202        for val in &self.name {
30203            __tmp.put_u8(*val);
30204        }
30205        for val in &self.uri {
30206            __tmp.put_u8(*val);
30207        }
30208        __tmp.put_u8(self.encoding as u8);
30209        __tmp.put_u8(self.camera_device_id);
30210        if matches!(version, MavlinkVersion::V2) {
30211            let len = __tmp.len();
30212            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
30213        } else {
30214            __tmp.len()
30215        }
30216    }
30217}
30218#[doc = "id: 270"]
30219#[doc = "Information about the status of a video stream. It may be requested using MAV_CMD_REQUEST_MESSAGE."]
30220#[derive(Debug, Clone, PartialEq)]
30221#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
30222#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30223pub struct VIDEO_STREAM_STATUS_DATA {
30224    #[doc = "Frame rate"]
30225    pub framerate: f32,
30226    #[doc = "Bit rate"]
30227    pub bitrate: u32,
30228    #[doc = "Bitmap of stream status flags"]
30229    pub flags: VideoStreamStatusFlags,
30230    #[doc = "Horizontal resolution"]
30231    pub resolution_h: u16,
30232    #[doc = "Vertical resolution"]
30233    pub resolution_v: u16,
30234    #[doc = "Video image rotation clockwise"]
30235    pub rotation: u16,
30236    #[doc = "Horizontal Field of view"]
30237    pub hfov: u16,
30238    #[doc = "Video Stream ID (1 for first, 2 for second, etc.)"]
30239    pub stream_id: u8,
30240    #[doc = "Camera id of a non-MAVLink camera attached to an autopilot (1-6).  0 if the component is a MAVLink camera (with its own component id)."]
30241    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
30242    pub camera_device_id: u8,
30243}
30244impl VIDEO_STREAM_STATUS_DATA {
30245    pub const ENCODED_LEN: usize = 20usize;
30246    pub const DEFAULT: Self = Self {
30247        framerate: 0.0_f32,
30248        bitrate: 0_u32,
30249        flags: VideoStreamStatusFlags::DEFAULT,
30250        resolution_h: 0_u16,
30251        resolution_v: 0_u16,
30252        rotation: 0_u16,
30253        hfov: 0_u16,
30254        stream_id: 0_u8,
30255        camera_device_id: 0_u8,
30256    };
30257    #[cfg(feature = "arbitrary")]
30258    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
30259        use arbitrary::{Arbitrary, Unstructured};
30260        let mut buf = [0u8; 1024];
30261        rng.fill_bytes(&mut buf);
30262        let mut unstructured = Unstructured::new(&buf);
30263        Self::arbitrary(&mut unstructured).unwrap_or_default()
30264    }
30265}
30266impl Default for VIDEO_STREAM_STATUS_DATA {
30267    fn default() -> Self {
30268        Self::DEFAULT.clone()
30269    }
30270}
30271impl MessageData for VIDEO_STREAM_STATUS_DATA {
30272    type Message = MavMessage;
30273    const ID: u32 = 270u32;
30274    const NAME: &'static str = "VIDEO_STREAM_STATUS";
30275    const EXTRA_CRC: u8 = 59u8;
30276    const ENCODED_LEN: usize = 20usize;
30277    fn deser(
30278        _version: MavlinkVersion,
30279        __input: &[u8],
30280    ) -> Result<Self, ::mavlink_core::error::ParserError> {
30281        let avail_len = __input.len();
30282        let mut payload_buf = [0; Self::ENCODED_LEN];
30283        let mut buf = if avail_len < Self::ENCODED_LEN {
30284            payload_buf[0..avail_len].copy_from_slice(__input);
30285            Bytes::new(&payload_buf)
30286        } else {
30287            Bytes::new(__input)
30288        };
30289        let mut __struct = Self::default();
30290        __struct.framerate = buf.get_f32_le();
30291        __struct.bitrate = buf.get_u32_le();
30292        let tmp = buf.get_u16_le();
30293        __struct.flags = VideoStreamStatusFlags::from_bits(
30294            tmp & VideoStreamStatusFlags::all().bits(),
30295        )
30296        .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
30297            flag_type: "VideoStreamStatusFlags",
30298            value: tmp as u32,
30299        })?;
30300        __struct.resolution_h = buf.get_u16_le();
30301        __struct.resolution_v = buf.get_u16_le();
30302        __struct.rotation = buf.get_u16_le();
30303        __struct.hfov = buf.get_u16_le();
30304        __struct.stream_id = buf.get_u8();
30305        __struct.camera_device_id = buf.get_u8();
30306        Ok(__struct)
30307    }
30308    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
30309        let mut __tmp = BytesMut::new(bytes);
30310        #[allow(clippy::absurd_extreme_comparisons)]
30311        #[allow(unused_comparisons)]
30312        if __tmp.remaining() < Self::ENCODED_LEN {
30313            panic!(
30314                "buffer is too small (need {} bytes, but got {})",
30315                Self::ENCODED_LEN,
30316                __tmp.remaining(),
30317            )
30318        }
30319        __tmp.put_f32_le(self.framerate);
30320        __tmp.put_u32_le(self.bitrate);
30321        __tmp.put_u16_le(self.flags.bits());
30322        __tmp.put_u16_le(self.resolution_h);
30323        __tmp.put_u16_le(self.resolution_v);
30324        __tmp.put_u16_le(self.rotation);
30325        __tmp.put_u16_le(self.hfov);
30326        __tmp.put_u8(self.stream_id);
30327        __tmp.put_u8(self.camera_device_id);
30328        if matches!(version, MavlinkVersion::V2) {
30329            let len = __tmp.len();
30330            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
30331        } else {
30332            __tmp.len()
30333        }
30334    }
30335}
30336#[doc = "id: 102"]
30337#[doc = "Local position/attitude estimate from a vision source."]
30338#[derive(Debug, Clone, PartialEq)]
30339#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
30340#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30341pub struct VISION_POSITION_ESTIMATE_DATA {
30342    #[doc = "Timestamp (UNIX time or time since system boot)"]
30343    pub usec: u64,
30344    #[doc = "Local X position"]
30345    pub x: f32,
30346    #[doc = "Local Y position"]
30347    pub y: f32,
30348    #[doc = "Local Z position"]
30349    pub z: f32,
30350    #[doc = "Roll angle"]
30351    pub roll: f32,
30352    #[doc = "Pitch angle"]
30353    pub pitch: f32,
30354    #[doc = "Yaw angle"]
30355    pub yaw: f32,
30356    #[doc = "Row-major representation of pose 6x6 cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array."]
30357    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
30358    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
30359    pub covariance: [f32; 21],
30360    #[doc = "Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps."]
30361    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
30362    pub reset_counter: u8,
30363}
30364impl VISION_POSITION_ESTIMATE_DATA {
30365    pub const ENCODED_LEN: usize = 117usize;
30366    pub const DEFAULT: Self = Self {
30367        usec: 0_u64,
30368        x: 0.0_f32,
30369        y: 0.0_f32,
30370        z: 0.0_f32,
30371        roll: 0.0_f32,
30372        pitch: 0.0_f32,
30373        yaw: 0.0_f32,
30374        covariance: [0.0_f32; 21usize],
30375        reset_counter: 0_u8,
30376    };
30377    #[cfg(feature = "arbitrary")]
30378    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
30379        use arbitrary::{Arbitrary, Unstructured};
30380        let mut buf = [0u8; 1024];
30381        rng.fill_bytes(&mut buf);
30382        let mut unstructured = Unstructured::new(&buf);
30383        Self::arbitrary(&mut unstructured).unwrap_or_default()
30384    }
30385}
30386impl Default for VISION_POSITION_ESTIMATE_DATA {
30387    fn default() -> Self {
30388        Self::DEFAULT.clone()
30389    }
30390}
30391impl MessageData for VISION_POSITION_ESTIMATE_DATA {
30392    type Message = MavMessage;
30393    const ID: u32 = 102u32;
30394    const NAME: &'static str = "VISION_POSITION_ESTIMATE";
30395    const EXTRA_CRC: u8 = 158u8;
30396    const ENCODED_LEN: usize = 117usize;
30397    fn deser(
30398        _version: MavlinkVersion,
30399        __input: &[u8],
30400    ) -> Result<Self, ::mavlink_core::error::ParserError> {
30401        let avail_len = __input.len();
30402        let mut payload_buf = [0; Self::ENCODED_LEN];
30403        let mut buf = if avail_len < Self::ENCODED_LEN {
30404            payload_buf[0..avail_len].copy_from_slice(__input);
30405            Bytes::new(&payload_buf)
30406        } else {
30407            Bytes::new(__input)
30408        };
30409        let mut __struct = Self::default();
30410        __struct.usec = buf.get_u64_le();
30411        __struct.x = buf.get_f32_le();
30412        __struct.y = buf.get_f32_le();
30413        __struct.z = buf.get_f32_le();
30414        __struct.roll = buf.get_f32_le();
30415        __struct.pitch = buf.get_f32_le();
30416        __struct.yaw = buf.get_f32_le();
30417        for v in &mut __struct.covariance {
30418            let val = buf.get_f32_le();
30419            *v = val;
30420        }
30421        __struct.reset_counter = buf.get_u8();
30422        Ok(__struct)
30423    }
30424    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
30425        let mut __tmp = BytesMut::new(bytes);
30426        #[allow(clippy::absurd_extreme_comparisons)]
30427        #[allow(unused_comparisons)]
30428        if __tmp.remaining() < Self::ENCODED_LEN {
30429            panic!(
30430                "buffer is too small (need {} bytes, but got {})",
30431                Self::ENCODED_LEN,
30432                __tmp.remaining(),
30433            )
30434        }
30435        __tmp.put_u64_le(self.usec);
30436        __tmp.put_f32_le(self.x);
30437        __tmp.put_f32_le(self.y);
30438        __tmp.put_f32_le(self.z);
30439        __tmp.put_f32_le(self.roll);
30440        __tmp.put_f32_le(self.pitch);
30441        __tmp.put_f32_le(self.yaw);
30442        for val in &self.covariance {
30443            __tmp.put_f32_le(*val);
30444        }
30445        __tmp.put_u8(self.reset_counter);
30446        if matches!(version, MavlinkVersion::V2) {
30447            let len = __tmp.len();
30448            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
30449        } else {
30450            __tmp.len()
30451        }
30452    }
30453}
30454#[doc = "id: 103"]
30455#[doc = "Speed estimate from a vision source."]
30456#[derive(Debug, Clone, PartialEq)]
30457#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
30458#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30459pub struct VISION_SPEED_ESTIMATE_DATA {
30460    #[doc = "Timestamp (UNIX time or time since system boot)"]
30461    pub usec: u64,
30462    #[doc = "Global X speed"]
30463    pub x: f32,
30464    #[doc = "Global Y speed"]
30465    pub y: f32,
30466    #[doc = "Global Z speed"]
30467    pub z: f32,
30468    #[doc = "Row-major representation of 3x3 linear velocity covariance matrix (states: vx, vy, vz; 1st three entries - 1st row, etc.). If unknown, assign NaN value to first element in the array."]
30469    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
30470    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
30471    pub covariance: [f32; 9],
30472    #[doc = "Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps."]
30473    #[cfg_attr(feature = "serde", serde(default = "crate::RustDefault::rust_default"))]
30474    pub reset_counter: u8,
30475}
30476impl VISION_SPEED_ESTIMATE_DATA {
30477    pub const ENCODED_LEN: usize = 57usize;
30478    pub const DEFAULT: Self = Self {
30479        usec: 0_u64,
30480        x: 0.0_f32,
30481        y: 0.0_f32,
30482        z: 0.0_f32,
30483        covariance: [0.0_f32; 9usize],
30484        reset_counter: 0_u8,
30485    };
30486    #[cfg(feature = "arbitrary")]
30487    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
30488        use arbitrary::{Arbitrary, Unstructured};
30489        let mut buf = [0u8; 1024];
30490        rng.fill_bytes(&mut buf);
30491        let mut unstructured = Unstructured::new(&buf);
30492        Self::arbitrary(&mut unstructured).unwrap_or_default()
30493    }
30494}
30495impl Default for VISION_SPEED_ESTIMATE_DATA {
30496    fn default() -> Self {
30497        Self::DEFAULT.clone()
30498    }
30499}
30500impl MessageData for VISION_SPEED_ESTIMATE_DATA {
30501    type Message = MavMessage;
30502    const ID: u32 = 103u32;
30503    const NAME: &'static str = "VISION_SPEED_ESTIMATE";
30504    const EXTRA_CRC: u8 = 208u8;
30505    const ENCODED_LEN: usize = 57usize;
30506    fn deser(
30507        _version: MavlinkVersion,
30508        __input: &[u8],
30509    ) -> Result<Self, ::mavlink_core::error::ParserError> {
30510        let avail_len = __input.len();
30511        let mut payload_buf = [0; Self::ENCODED_LEN];
30512        let mut buf = if avail_len < Self::ENCODED_LEN {
30513            payload_buf[0..avail_len].copy_from_slice(__input);
30514            Bytes::new(&payload_buf)
30515        } else {
30516            Bytes::new(__input)
30517        };
30518        let mut __struct = Self::default();
30519        __struct.usec = buf.get_u64_le();
30520        __struct.x = buf.get_f32_le();
30521        __struct.y = buf.get_f32_le();
30522        __struct.z = buf.get_f32_le();
30523        for v in &mut __struct.covariance {
30524            let val = buf.get_f32_le();
30525            *v = val;
30526        }
30527        __struct.reset_counter = buf.get_u8();
30528        Ok(__struct)
30529    }
30530    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
30531        let mut __tmp = BytesMut::new(bytes);
30532        #[allow(clippy::absurd_extreme_comparisons)]
30533        #[allow(unused_comparisons)]
30534        if __tmp.remaining() < Self::ENCODED_LEN {
30535            panic!(
30536                "buffer is too small (need {} bytes, but got {})",
30537                Self::ENCODED_LEN,
30538                __tmp.remaining(),
30539            )
30540        }
30541        __tmp.put_u64_le(self.usec);
30542        __tmp.put_f32_le(self.x);
30543        __tmp.put_f32_le(self.y);
30544        __tmp.put_f32_le(self.z);
30545        for val in &self.covariance {
30546            __tmp.put_f32_le(*val);
30547        }
30548        __tmp.put_u8(self.reset_counter);
30549        if matches!(version, MavlinkVersion::V2) {
30550            let len = __tmp.len();
30551            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
30552        } else {
30553            __tmp.len()
30554        }
30555    }
30556}
30557#[doc = "id: 9000"]
30558#[doc = "Cumulative distance traveled for each reported wheel."]
30559#[derive(Debug, Clone, PartialEq)]
30560#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
30561#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30562pub struct WHEEL_DISTANCE_DATA {
30563    #[doc = "Timestamp (synced to UNIX time or since system boot)."]
30564    pub time_usec: u64,
30565    #[doc = "Distance reported by individual wheel encoders. Forward rotations increase values, reverse rotations decrease them. Not all wheels will necessarily have wheel encoders; the mapping of encoders to wheel positions must be agreed/understood by the endpoints."]
30566    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
30567    pub distance: [f64; 16],
30568    #[doc = "Number of wheels reported."]
30569    pub count: u8,
30570}
30571impl WHEEL_DISTANCE_DATA {
30572    pub const ENCODED_LEN: usize = 137usize;
30573    pub const DEFAULT: Self = Self {
30574        time_usec: 0_u64,
30575        distance: [0.0_f64; 16usize],
30576        count: 0_u8,
30577    };
30578    #[cfg(feature = "arbitrary")]
30579    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
30580        use arbitrary::{Arbitrary, Unstructured};
30581        let mut buf = [0u8; 1024];
30582        rng.fill_bytes(&mut buf);
30583        let mut unstructured = Unstructured::new(&buf);
30584        Self::arbitrary(&mut unstructured).unwrap_or_default()
30585    }
30586}
30587impl Default for WHEEL_DISTANCE_DATA {
30588    fn default() -> Self {
30589        Self::DEFAULT.clone()
30590    }
30591}
30592impl MessageData for WHEEL_DISTANCE_DATA {
30593    type Message = MavMessage;
30594    const ID: u32 = 9000u32;
30595    const NAME: &'static str = "WHEEL_DISTANCE";
30596    const EXTRA_CRC: u8 = 113u8;
30597    const ENCODED_LEN: usize = 137usize;
30598    fn deser(
30599        _version: MavlinkVersion,
30600        __input: &[u8],
30601    ) -> Result<Self, ::mavlink_core::error::ParserError> {
30602        let avail_len = __input.len();
30603        let mut payload_buf = [0; Self::ENCODED_LEN];
30604        let mut buf = if avail_len < Self::ENCODED_LEN {
30605            payload_buf[0..avail_len].copy_from_slice(__input);
30606            Bytes::new(&payload_buf)
30607        } else {
30608            Bytes::new(__input)
30609        };
30610        let mut __struct = Self::default();
30611        __struct.time_usec = buf.get_u64_le();
30612        for v in &mut __struct.distance {
30613            let val = buf.get_f64_le();
30614            *v = val;
30615        }
30616        __struct.count = buf.get_u8();
30617        Ok(__struct)
30618    }
30619    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
30620        let mut __tmp = BytesMut::new(bytes);
30621        #[allow(clippy::absurd_extreme_comparisons)]
30622        #[allow(unused_comparisons)]
30623        if __tmp.remaining() < Self::ENCODED_LEN {
30624            panic!(
30625                "buffer is too small (need {} bytes, but got {})",
30626                Self::ENCODED_LEN,
30627                __tmp.remaining(),
30628            )
30629        }
30630        __tmp.put_u64_le(self.time_usec);
30631        for val in &self.distance {
30632            __tmp.put_f64_le(*val);
30633        }
30634        __tmp.put_u8(self.count);
30635        if matches!(version, MavlinkVersion::V2) {
30636            let len = __tmp.len();
30637            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
30638        } else {
30639            __tmp.len()
30640        }
30641    }
30642}
30643#[doc = "id: 299"]
30644#[doc = "Configure WiFi AP SSID, password, and mode. This message is re-emitted as an acknowledgement by the AP. The message may also be explicitly requested using MAV_CMD_REQUEST_MESSAGE."]
30645#[derive(Debug, Clone, PartialEq)]
30646#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
30647#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30648pub struct WIFI_CONFIG_AP_DATA {
30649    #[doc = "Name of Wi-Fi network (SSID). Blank to leave it unchanged when setting. Current SSID when sent back as a response."]
30650    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
30651    pub ssid: [u8; 32],
30652    #[doc = "Password. Blank for an open AP. MD5 hash when message is sent back as a response."]
30653    #[cfg_attr(feature = "serde", serde(with = "serde_arrays"))]
30654    pub password: [u8; 64],
30655    #[doc = "WiFi Mode."]
30656    #[cfg_attr(feature = "serde", serde(default))]
30657    pub mode: WifiConfigApMode,
30658    #[doc = "Message acceptance response (sent back to GS)."]
30659    #[cfg_attr(feature = "serde", serde(default))]
30660    pub response: WifiConfigApResponse,
30661}
30662impl WIFI_CONFIG_AP_DATA {
30663    pub const ENCODED_LEN: usize = 98usize;
30664    pub const DEFAULT: Self = Self {
30665        ssid: [0_u8; 32usize],
30666        password: [0_u8; 64usize],
30667        mode: WifiConfigApMode::DEFAULT,
30668        response: WifiConfigApResponse::DEFAULT,
30669    };
30670    #[cfg(feature = "arbitrary")]
30671    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
30672        use arbitrary::{Arbitrary, Unstructured};
30673        let mut buf = [0u8; 1024];
30674        rng.fill_bytes(&mut buf);
30675        let mut unstructured = Unstructured::new(&buf);
30676        Self::arbitrary(&mut unstructured).unwrap_or_default()
30677    }
30678}
30679impl Default for WIFI_CONFIG_AP_DATA {
30680    fn default() -> Self {
30681        Self::DEFAULT.clone()
30682    }
30683}
30684impl MessageData for WIFI_CONFIG_AP_DATA {
30685    type Message = MavMessage;
30686    const ID: u32 = 299u32;
30687    const NAME: &'static str = "WIFI_CONFIG_AP";
30688    const EXTRA_CRC: u8 = 19u8;
30689    const ENCODED_LEN: usize = 98usize;
30690    fn deser(
30691        _version: MavlinkVersion,
30692        __input: &[u8],
30693    ) -> Result<Self, ::mavlink_core::error::ParserError> {
30694        let avail_len = __input.len();
30695        let mut payload_buf = [0; Self::ENCODED_LEN];
30696        let mut buf = if avail_len < Self::ENCODED_LEN {
30697            payload_buf[0..avail_len].copy_from_slice(__input);
30698            Bytes::new(&payload_buf)
30699        } else {
30700            Bytes::new(__input)
30701        };
30702        let mut __struct = Self::default();
30703        for v in &mut __struct.ssid {
30704            let val = buf.get_u8();
30705            *v = val;
30706        }
30707        for v in &mut __struct.password {
30708            let val = buf.get_u8();
30709            *v = val;
30710        }
30711        let tmp = buf.get_i8();
30712        __struct.mode =
30713            FromPrimitive::from_i8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
30714                enum_type: "WifiConfigApMode",
30715                value: tmp as u32,
30716            })?;
30717        let tmp = buf.get_i8();
30718        __struct.response =
30719            FromPrimitive::from_i8(tmp).ok_or(::mavlink_core::error::ParserError::InvalidEnum {
30720                enum_type: "WifiConfigApResponse",
30721                value: tmp as u32,
30722            })?;
30723        Ok(__struct)
30724    }
30725    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
30726        let mut __tmp = BytesMut::new(bytes);
30727        #[allow(clippy::absurd_extreme_comparisons)]
30728        #[allow(unused_comparisons)]
30729        if __tmp.remaining() < Self::ENCODED_LEN {
30730            panic!(
30731                "buffer is too small (need {} bytes, but got {})",
30732                Self::ENCODED_LEN,
30733                __tmp.remaining(),
30734            )
30735        }
30736        for val in &self.ssid {
30737            __tmp.put_u8(*val);
30738        }
30739        for val in &self.password {
30740            __tmp.put_u8(*val);
30741        }
30742        __tmp.put_i8(self.mode as i8);
30743        __tmp.put_i8(self.response as i8);
30744        if matches!(version, MavlinkVersion::V2) {
30745            let len = __tmp.len();
30746            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
30747        } else {
30748            __tmp.len()
30749        }
30750    }
30751}
30752#[doc = "id: 9005"]
30753#[doc = "Winch status."]
30754#[derive(Debug, Clone, PartialEq)]
30755#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
30756#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30757pub struct WINCH_STATUS_DATA {
30758    #[doc = "Timestamp (synced to UNIX time or since system boot)."]
30759    pub time_usec: u64,
30760    #[doc = "Length of line released. NaN if unknown"]
30761    pub line_length: f32,
30762    #[doc = "Speed line is being released or retracted. Positive values if being released, negative values if being retracted, NaN if unknown"]
30763    pub speed: f32,
30764    #[doc = "Tension on the line. NaN if unknown"]
30765    pub tension: f32,
30766    #[doc = "Voltage of the battery supplying the winch. NaN if unknown"]
30767    pub voltage: f32,
30768    #[doc = "Current draw from the winch. NaN if unknown"]
30769    pub current: f32,
30770    #[doc = "Status flags"]
30771    pub status: MavWinchStatusFlag,
30772    #[doc = "Temperature of the motor. INT16_MAX if unknown"]
30773    pub temperature: i16,
30774}
30775impl WINCH_STATUS_DATA {
30776    pub const ENCODED_LEN: usize = 34usize;
30777    pub const DEFAULT: Self = Self {
30778        time_usec: 0_u64,
30779        line_length: 0.0_f32,
30780        speed: 0.0_f32,
30781        tension: 0.0_f32,
30782        voltage: 0.0_f32,
30783        current: 0.0_f32,
30784        status: MavWinchStatusFlag::DEFAULT,
30785        temperature: 0_i16,
30786    };
30787    #[cfg(feature = "arbitrary")]
30788    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
30789        use arbitrary::{Arbitrary, Unstructured};
30790        let mut buf = [0u8; 1024];
30791        rng.fill_bytes(&mut buf);
30792        let mut unstructured = Unstructured::new(&buf);
30793        Self::arbitrary(&mut unstructured).unwrap_or_default()
30794    }
30795}
30796impl Default for WINCH_STATUS_DATA {
30797    fn default() -> Self {
30798        Self::DEFAULT.clone()
30799    }
30800}
30801impl MessageData for WINCH_STATUS_DATA {
30802    type Message = MavMessage;
30803    const ID: u32 = 9005u32;
30804    const NAME: &'static str = "WINCH_STATUS";
30805    const EXTRA_CRC: u8 = 117u8;
30806    const ENCODED_LEN: usize = 34usize;
30807    fn deser(
30808        _version: MavlinkVersion,
30809        __input: &[u8],
30810    ) -> Result<Self, ::mavlink_core::error::ParserError> {
30811        let avail_len = __input.len();
30812        let mut payload_buf = [0; Self::ENCODED_LEN];
30813        let mut buf = if avail_len < Self::ENCODED_LEN {
30814            payload_buf[0..avail_len].copy_from_slice(__input);
30815            Bytes::new(&payload_buf)
30816        } else {
30817            Bytes::new(__input)
30818        };
30819        let mut __struct = Self::default();
30820        __struct.time_usec = buf.get_u64_le();
30821        __struct.line_length = buf.get_f32_le();
30822        __struct.speed = buf.get_f32_le();
30823        __struct.tension = buf.get_f32_le();
30824        __struct.voltage = buf.get_f32_le();
30825        __struct.current = buf.get_f32_le();
30826        let tmp = buf.get_u32_le();
30827        __struct.status = MavWinchStatusFlag::from_bits(tmp & MavWinchStatusFlag::all().bits())
30828            .ok_or(::mavlink_core::error::ParserError::InvalidFlag {
30829                flag_type: "MavWinchStatusFlag",
30830                value: tmp as u32,
30831            })?;
30832        __struct.temperature = buf.get_i16_le();
30833        Ok(__struct)
30834    }
30835    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
30836        let mut __tmp = BytesMut::new(bytes);
30837        #[allow(clippy::absurd_extreme_comparisons)]
30838        #[allow(unused_comparisons)]
30839        if __tmp.remaining() < Self::ENCODED_LEN {
30840            panic!(
30841                "buffer is too small (need {} bytes, but got {})",
30842                Self::ENCODED_LEN,
30843                __tmp.remaining(),
30844            )
30845        }
30846        __tmp.put_u64_le(self.time_usec);
30847        __tmp.put_f32_le(self.line_length);
30848        __tmp.put_f32_le(self.speed);
30849        __tmp.put_f32_le(self.tension);
30850        __tmp.put_f32_le(self.voltage);
30851        __tmp.put_f32_le(self.current);
30852        __tmp.put_u32_le(self.status.bits());
30853        __tmp.put_i16_le(self.temperature);
30854        if matches!(version, MavlinkVersion::V2) {
30855            let len = __tmp.len();
30856            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
30857        } else {
30858            __tmp.len()
30859        }
30860    }
30861}
30862#[doc = "id: 231"]
30863#[doc = "Wind estimate from vehicle. Note that despite the name, this message does not actually contain any covariances but instead variability and accuracy fields in terms of standard deviation (1-STD)."]
30864#[derive(Debug, Clone, PartialEq)]
30865#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
30866#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30867pub struct WIND_COV_DATA {
30868    #[doc = "Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number."]
30869    pub time_usec: u64,
30870    #[doc = "Wind in North (NED) direction (NAN if unknown)"]
30871    pub wind_x: f32,
30872    #[doc = "Wind in East (NED) direction (NAN if unknown)"]
30873    pub wind_y: f32,
30874    #[doc = "Wind in down (NED) direction (NAN if unknown)"]
30875    pub wind_z: f32,
30876    #[doc = "Variability of wind in XY, 1-STD estimated from a 1 Hz lowpassed wind estimate (NAN if unknown)"]
30877    pub var_horiz: f32,
30878    #[doc = "Variability of wind in Z, 1-STD estimated from a 1 Hz lowpassed wind estimate (NAN if unknown)"]
30879    pub var_vert: f32,
30880    #[doc = "Altitude (MSL) that this measurement was taken at (NAN if unknown)"]
30881    pub wind_alt: f32,
30882    #[doc = "Horizontal speed 1-STD accuracy (0 if unknown)"]
30883    pub horiz_accuracy: f32,
30884    #[doc = "Vertical speed 1-STD accuracy (0 if unknown)"]
30885    pub vert_accuracy: f32,
30886}
30887impl WIND_COV_DATA {
30888    pub const ENCODED_LEN: usize = 40usize;
30889    pub const DEFAULT: Self = Self {
30890        time_usec: 0_u64,
30891        wind_x: 0.0_f32,
30892        wind_y: 0.0_f32,
30893        wind_z: 0.0_f32,
30894        var_horiz: 0.0_f32,
30895        var_vert: 0.0_f32,
30896        wind_alt: 0.0_f32,
30897        horiz_accuracy: 0.0_f32,
30898        vert_accuracy: 0.0_f32,
30899    };
30900    #[cfg(feature = "arbitrary")]
30901    pub fn random<R: rand::RngCore>(rng: &mut R) -> Self {
30902        use arbitrary::{Arbitrary, Unstructured};
30903        let mut buf = [0u8; 1024];
30904        rng.fill_bytes(&mut buf);
30905        let mut unstructured = Unstructured::new(&buf);
30906        Self::arbitrary(&mut unstructured).unwrap_or_default()
30907    }
30908}
30909impl Default for WIND_COV_DATA {
30910    fn default() -> Self {
30911        Self::DEFAULT.clone()
30912    }
30913}
30914impl MessageData for WIND_COV_DATA {
30915    type Message = MavMessage;
30916    const ID: u32 = 231u32;
30917    const NAME: &'static str = "WIND_COV";
30918    const EXTRA_CRC: u8 = 105u8;
30919    const ENCODED_LEN: usize = 40usize;
30920    fn deser(
30921        _version: MavlinkVersion,
30922        __input: &[u8],
30923    ) -> Result<Self, ::mavlink_core::error::ParserError> {
30924        let avail_len = __input.len();
30925        let mut payload_buf = [0; Self::ENCODED_LEN];
30926        let mut buf = if avail_len < Self::ENCODED_LEN {
30927            payload_buf[0..avail_len].copy_from_slice(__input);
30928            Bytes::new(&payload_buf)
30929        } else {
30930            Bytes::new(__input)
30931        };
30932        let mut __struct = Self::default();
30933        __struct.time_usec = buf.get_u64_le();
30934        __struct.wind_x = buf.get_f32_le();
30935        __struct.wind_y = buf.get_f32_le();
30936        __struct.wind_z = buf.get_f32_le();
30937        __struct.var_horiz = buf.get_f32_le();
30938        __struct.var_vert = buf.get_f32_le();
30939        __struct.wind_alt = buf.get_f32_le();
30940        __struct.horiz_accuracy = buf.get_f32_le();
30941        __struct.vert_accuracy = buf.get_f32_le();
30942        Ok(__struct)
30943    }
30944    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
30945        let mut __tmp = BytesMut::new(bytes);
30946        #[allow(clippy::absurd_extreme_comparisons)]
30947        #[allow(unused_comparisons)]
30948        if __tmp.remaining() < Self::ENCODED_LEN {
30949            panic!(
30950                "buffer is too small (need {} bytes, but got {})",
30951                Self::ENCODED_LEN,
30952                __tmp.remaining(),
30953            )
30954        }
30955        __tmp.put_u64_le(self.time_usec);
30956        __tmp.put_f32_le(self.wind_x);
30957        __tmp.put_f32_le(self.wind_y);
30958        __tmp.put_f32_le(self.wind_z);
30959        __tmp.put_f32_le(self.var_horiz);
30960        __tmp.put_f32_le(self.var_vert);
30961        __tmp.put_f32_le(self.wind_alt);
30962        __tmp.put_f32_le(self.horiz_accuracy);
30963        __tmp.put_f32_le(self.vert_accuracy);
30964        if matches!(version, MavlinkVersion::V2) {
30965            let len = __tmp.len();
30966            ::mavlink_core::utils::remove_trailing_zeroes(&bytes[..len])
30967        } else {
30968            __tmp.len()
30969        }
30970    }
30971}
30972#[derive(Clone, PartialEq, Debug)]
30973#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
30974#[cfg_attr(feature = "serde", serde(tag = "type"))]
30975#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30976#[repr(u32)]
30977pub enum MavMessage {
30978    ACTUATOR_CONTROL_TARGET(ACTUATOR_CONTROL_TARGET_DATA),
30979    ACTUATOR_OUTPUT_STATUS(ACTUATOR_OUTPUT_STATUS_DATA),
30980    ADSB_VEHICLE(ADSB_VEHICLE_DATA),
30981    AIS_VESSEL(AIS_VESSEL_DATA),
30982    ALTITUDE(ALTITUDE_DATA),
30983    ATTITUDE(ATTITUDE_DATA),
30984    ATTITUDE_QUATERNION(ATTITUDE_QUATERNION_DATA),
30985    ATTITUDE_QUATERNION_COV(ATTITUDE_QUATERNION_COV_DATA),
30986    ATTITUDE_TARGET(ATTITUDE_TARGET_DATA),
30987    ATT_POS_MOCAP(ATT_POS_MOCAP_DATA),
30988    AUTH_KEY(AUTH_KEY_DATA),
30989    AUTOPILOT_STATE_FOR_GIMBAL_DEVICE(AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA),
30990    AUTOPILOT_VERSION(AUTOPILOT_VERSION_DATA),
30991    AVAILABLE_MODES(AVAILABLE_MODES_DATA),
30992    AVAILABLE_MODES_MONITOR(AVAILABLE_MODES_MONITOR_DATA),
30993    BATTERY_INFO(BATTERY_INFO_DATA),
30994    BATTERY_STATUS(BATTERY_STATUS_DATA),
30995    BUTTON_CHANGE(BUTTON_CHANGE_DATA),
30996    CAMERA_CAPTURE_STATUS(CAMERA_CAPTURE_STATUS_DATA),
30997    CAMERA_FOV_STATUS(CAMERA_FOV_STATUS_DATA),
30998    CAMERA_IMAGE_CAPTURED(CAMERA_IMAGE_CAPTURED_DATA),
30999    CAMERA_INFORMATION(CAMERA_INFORMATION_DATA),
31000    CAMERA_SETTINGS(CAMERA_SETTINGS_DATA),
31001    CAMERA_THERMAL_RANGE(CAMERA_THERMAL_RANGE_DATA),
31002    CAMERA_TRACKING_GEO_STATUS(CAMERA_TRACKING_GEO_STATUS_DATA),
31003    CAMERA_TRACKING_IMAGE_STATUS(CAMERA_TRACKING_IMAGE_STATUS_DATA),
31004    CAMERA_TRIGGER(CAMERA_TRIGGER_DATA),
31005    CANFD_FRAME(CANFD_FRAME_DATA),
31006    CAN_FILTER_MODIFY(CAN_FILTER_MODIFY_DATA),
31007    CAN_FRAME(CAN_FRAME_DATA),
31008    CELLULAR_CONFIG(CELLULAR_CONFIG_DATA),
31009    CELLULAR_STATUS(CELLULAR_STATUS_DATA),
31010    CHANGE_OPERATOR_CONTROL(CHANGE_OPERATOR_CONTROL_DATA),
31011    CHANGE_OPERATOR_CONTROL_ACK(CHANGE_OPERATOR_CONTROL_ACK_DATA),
31012    COLLISION(COLLISION_DATA),
31013    COMMAND_ACK(COMMAND_ACK_DATA),
31014    COMMAND_CANCEL(COMMAND_CANCEL_DATA),
31015    COMMAND_INT(COMMAND_INT_DATA),
31016    COMMAND_LONG(COMMAND_LONG_DATA),
31017    #[deprecated = " See `COMPONENT_METADATA` (Deprecated since 2022-04)"]
31018    COMPONENT_INFORMATION(COMPONENT_INFORMATION_DATA),
31019    COMPONENT_INFORMATION_BASIC(COMPONENT_INFORMATION_BASIC_DATA),
31020    COMPONENT_METADATA(COMPONENT_METADATA_DATA),
31021    CONTROL_SYSTEM_STATE(CONTROL_SYSTEM_STATE_DATA),
31022    CURRENT_EVENT_SEQUENCE(CURRENT_EVENT_SEQUENCE_DATA),
31023    CURRENT_MODE(CURRENT_MODE_DATA),
31024    #[deprecated = " See `MESSAGE_INTERVAL` (Deprecated since 2015-08)"]
31025    DATA_STREAM(DATA_STREAM_DATA),
31026    DATA_TRANSMISSION_HANDSHAKE(DATA_TRANSMISSION_HANDSHAKE_DATA),
31027    DEBUG(DEBUG_DATA),
31028    DEBUG_FLOAT_ARRAY(DEBUG_FLOAT_ARRAY_DATA),
31029    DEBUG_VECT(DEBUG_VECT_DATA),
31030    DISTANCE_SENSOR(DISTANCE_SENSOR_DATA),
31031    EFI_STATUS(EFI_STATUS_DATA),
31032    ENCAPSULATED_DATA(ENCAPSULATED_DATA_DATA),
31033    ESC_INFO(ESC_INFO_DATA),
31034    ESC_STATUS(ESC_STATUS_DATA),
31035    ESTIMATOR_STATUS(ESTIMATOR_STATUS_DATA),
31036    EVENT(EVENT_DATA),
31037    EXTENDED_SYS_STATE(EXTENDED_SYS_STATE_DATA),
31038    FENCE_STATUS(FENCE_STATUS_DATA),
31039    FILE_TRANSFER_PROTOCOL(FILE_TRANSFER_PROTOCOL_DATA),
31040    FLIGHT_INFORMATION(FLIGHT_INFORMATION_DATA),
31041    FOLLOW_TARGET(FOLLOW_TARGET_DATA),
31042    FUEL_STATUS(FUEL_STATUS_DATA),
31043    GENERATOR_STATUS(GENERATOR_STATUS_DATA),
31044    GIMBAL_DEVICE_ATTITUDE_STATUS(GIMBAL_DEVICE_ATTITUDE_STATUS_DATA),
31045    GIMBAL_DEVICE_INFORMATION(GIMBAL_DEVICE_INFORMATION_DATA),
31046    GIMBAL_DEVICE_SET_ATTITUDE(GIMBAL_DEVICE_SET_ATTITUDE_DATA),
31047    GIMBAL_MANAGER_INFORMATION(GIMBAL_MANAGER_INFORMATION_DATA),
31048    GIMBAL_MANAGER_SET_ATTITUDE(GIMBAL_MANAGER_SET_ATTITUDE_DATA),
31049    GIMBAL_MANAGER_SET_MANUAL_CONTROL(GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA),
31050    GIMBAL_MANAGER_SET_PITCHYAW(GIMBAL_MANAGER_SET_PITCHYAW_DATA),
31051    GIMBAL_MANAGER_STATUS(GIMBAL_MANAGER_STATUS_DATA),
31052    GLOBAL_POSITION_INT(GLOBAL_POSITION_INT_DATA),
31053    GLOBAL_POSITION_INT_COV(GLOBAL_POSITION_INT_COV_DATA),
31054    GLOBAL_VISION_POSITION_ESTIMATE(GLOBAL_VISION_POSITION_ESTIMATE_DATA),
31055    GPS2_RAW(GPS2_RAW_DATA),
31056    GPS2_RTK(GPS2_RTK_DATA),
31057    GPS_GLOBAL_ORIGIN(GPS_GLOBAL_ORIGIN_DATA),
31058    #[deprecated = " See `GPS_RTCM_DATA` (Deprecated since 2022-05)"]
31059    GPS_INJECT_DATA(GPS_INJECT_DATA_DATA),
31060    GPS_INPUT(GPS_INPUT_DATA),
31061    GPS_RAW_INT(GPS_RAW_INT_DATA),
31062    GPS_RTCM_DATA(GPS_RTCM_DATA_DATA),
31063    GPS_RTK(GPS_RTK_DATA),
31064    GPS_STATUS(GPS_STATUS_DATA),
31065    HEARTBEAT(HEARTBEAT_DATA),
31066    HIGHRES_IMU(HIGHRES_IMU_DATA),
31067    #[deprecated = " See `HIGH_LATENCY2` (Deprecated since 2020-10)"]
31068    HIGH_LATENCY(HIGH_LATENCY_DATA),
31069    HIGH_LATENCY2(HIGH_LATENCY2_DATA),
31070    HIL_ACTUATOR_CONTROLS(HIL_ACTUATOR_CONTROLS_DATA),
31071    HIL_CONTROLS(HIL_CONTROLS_DATA),
31072    HIL_GPS(HIL_GPS_DATA),
31073    HIL_OPTICAL_FLOW(HIL_OPTICAL_FLOW_DATA),
31074    HIL_RC_INPUTS_RAW(HIL_RC_INPUTS_RAW_DATA),
31075    HIL_SENSOR(HIL_SENSOR_DATA),
31076    #[deprecated = "Suffers from missing airspeed fields and singularities due to Euler angles. See `HIL_STATE_QUATERNION` (Deprecated since 2013-07)"]
31077    HIL_STATE(HIL_STATE_DATA),
31078    HIL_STATE_QUATERNION(HIL_STATE_QUATERNION_DATA),
31079    HOME_POSITION(HOME_POSITION_DATA),
31080    HYGROMETER_SENSOR(HYGROMETER_SENSOR_DATA),
31081    ILLUMINATOR_STATUS(ILLUMINATOR_STATUS_DATA),
31082    ISBD_LINK_STATUS(ISBD_LINK_STATUS_DATA),
31083    LANDING_TARGET(LANDING_TARGET_DATA),
31084    LINK_NODE_STATUS(LINK_NODE_STATUS_DATA),
31085    LOCAL_POSITION_NED(LOCAL_POSITION_NED_DATA),
31086    LOCAL_POSITION_NED_COV(LOCAL_POSITION_NED_COV_DATA),
31087    LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET(LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA),
31088    LOGGING_ACK(LOGGING_ACK_DATA),
31089    LOGGING_DATA(LOGGING_DATA_DATA),
31090    LOGGING_DATA_ACKED(LOGGING_DATA_ACKED_DATA),
31091    LOG_DATA(LOG_DATA_DATA),
31092    LOG_ENTRY(LOG_ENTRY_DATA),
31093    LOG_ERASE(LOG_ERASE_DATA),
31094    LOG_REQUEST_DATA(LOG_REQUEST_DATA_DATA),
31095    LOG_REQUEST_END(LOG_REQUEST_END_DATA),
31096    LOG_REQUEST_LIST(LOG_REQUEST_LIST_DATA),
31097    MAG_CAL_REPORT(MAG_CAL_REPORT_DATA),
31098    MANUAL_CONTROL(MANUAL_CONTROL_DATA),
31099    MANUAL_SETPOINT(MANUAL_SETPOINT_DATA),
31100    MEMORY_VECT(MEMORY_VECT_DATA),
31101    MESSAGE_INTERVAL(MESSAGE_INTERVAL_DATA),
31102    MISSION_ACK(MISSION_ACK_DATA),
31103    MISSION_CLEAR_ALL(MISSION_CLEAR_ALL_DATA),
31104    MISSION_COUNT(MISSION_COUNT_DATA),
31105    MISSION_CURRENT(MISSION_CURRENT_DATA),
31106    #[deprecated = " See `MISSION_ITEM_INT` (Deprecated since 2020-06)"]
31107    MISSION_ITEM(MISSION_ITEM_DATA),
31108    MISSION_ITEM_INT(MISSION_ITEM_INT_DATA),
31109    MISSION_ITEM_REACHED(MISSION_ITEM_REACHED_DATA),
31110    #[deprecated = "A system that gets this request should respond with MISSION_ITEM_INT (as though MISSION_REQUEST_INT was received). See `MISSION_REQUEST_INT` (Deprecated since 2020-06)"]
31111    MISSION_REQUEST(MISSION_REQUEST_DATA),
31112    MISSION_REQUEST_INT(MISSION_REQUEST_INT_DATA),
31113    MISSION_REQUEST_LIST(MISSION_REQUEST_LIST_DATA),
31114    MISSION_REQUEST_PARTIAL_LIST(MISSION_REQUEST_PARTIAL_LIST_DATA),
31115    #[deprecated = " See `MAV_CMD_DO_SET_MISSION_CURRENT` (Deprecated since 2022-08)"]
31116    MISSION_SET_CURRENT(MISSION_SET_CURRENT_DATA),
31117    MISSION_WRITE_PARTIAL_LIST(MISSION_WRITE_PARTIAL_LIST_DATA),
31118    #[deprecated = "This message is being superseded by MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW. The message can still be used to communicate with legacy gimbals implementing it. See `MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW` (Deprecated since 2020-01)"]
31119    MOUNT_ORIENTATION(MOUNT_ORIENTATION_DATA),
31120    NAMED_VALUE_FLOAT(NAMED_VALUE_FLOAT_DATA),
31121    NAMED_VALUE_INT(NAMED_VALUE_INT_DATA),
31122    NAV_CONTROLLER_OUTPUT(NAV_CONTROLLER_OUTPUT_DATA),
31123    OBSTACLE_DISTANCE(OBSTACLE_DISTANCE_DATA),
31124    ODOMETRY(ODOMETRY_DATA),
31125    ONBOARD_COMPUTER_STATUS(ONBOARD_COMPUTER_STATUS_DATA),
31126    OPEN_DRONE_ID_ARM_STATUS(OPEN_DRONE_ID_ARM_STATUS_DATA),
31127    OPEN_DRONE_ID_AUTHENTICATION(OPEN_DRONE_ID_AUTHENTICATION_DATA),
31128    OPEN_DRONE_ID_BASIC_ID(OPEN_DRONE_ID_BASIC_ID_DATA),
31129    OPEN_DRONE_ID_LOCATION(OPEN_DRONE_ID_LOCATION_DATA),
31130    OPEN_DRONE_ID_MESSAGE_PACK(OPEN_DRONE_ID_MESSAGE_PACK_DATA),
31131    OPEN_DRONE_ID_OPERATOR_ID(OPEN_DRONE_ID_OPERATOR_ID_DATA),
31132    OPEN_DRONE_ID_SELF_ID(OPEN_DRONE_ID_SELF_ID_DATA),
31133    OPEN_DRONE_ID_SYSTEM(OPEN_DRONE_ID_SYSTEM_DATA),
31134    OPEN_DRONE_ID_SYSTEM_UPDATE(OPEN_DRONE_ID_SYSTEM_UPDATE_DATA),
31135    OPTICAL_FLOW(OPTICAL_FLOW_DATA),
31136    OPTICAL_FLOW_RAD(OPTICAL_FLOW_RAD_DATA),
31137    ORBIT_EXECUTION_STATUS(ORBIT_EXECUTION_STATUS_DATA),
31138    PARAM_EXT_ACK(PARAM_EXT_ACK_DATA),
31139    PARAM_EXT_REQUEST_LIST(PARAM_EXT_REQUEST_LIST_DATA),
31140    PARAM_EXT_REQUEST_READ(PARAM_EXT_REQUEST_READ_DATA),
31141    PARAM_EXT_SET(PARAM_EXT_SET_DATA),
31142    PARAM_EXT_VALUE(PARAM_EXT_VALUE_DATA),
31143    PARAM_MAP_RC(PARAM_MAP_RC_DATA),
31144    PARAM_REQUEST_LIST(PARAM_REQUEST_LIST_DATA),
31145    PARAM_REQUEST_READ(PARAM_REQUEST_READ_DATA),
31146    PARAM_SET(PARAM_SET_DATA),
31147    PARAM_VALUE(PARAM_VALUE_DATA),
31148    #[deprecated = "To be removed / merged with TIMESYNC. See `TIMESYNC` (Deprecated since 2011-08)"]
31149    PING(PING_DATA),
31150    #[deprecated = "New version explicitly defines format. More interoperable. See `PLAY_TUNE_V2` (Deprecated since 2019-10)"]
31151    PLAY_TUNE(PLAY_TUNE_DATA),
31152    PLAY_TUNE_V2(PLAY_TUNE_V2_DATA),
31153    POSITION_TARGET_GLOBAL_INT(POSITION_TARGET_GLOBAL_INT_DATA),
31154    POSITION_TARGET_LOCAL_NED(POSITION_TARGET_LOCAL_NED_DATA),
31155    POWER_STATUS(POWER_STATUS_DATA),
31156    PROTOCOL_VERSION(PROTOCOL_VERSION_DATA),
31157    RADIO_STATUS(RADIO_STATUS_DATA),
31158    RAW_IMU(RAW_IMU_DATA),
31159    RAW_PRESSURE(RAW_PRESSURE_DATA),
31160    RAW_RPM(RAW_RPM_DATA),
31161    RC_CHANNELS(RC_CHANNELS_DATA),
31162    RC_CHANNELS_OVERRIDE(RC_CHANNELS_OVERRIDE_DATA),
31163    RC_CHANNELS_RAW(RC_CHANNELS_RAW_DATA),
31164    RC_CHANNELS_SCALED(RC_CHANNELS_SCALED_DATA),
31165    #[deprecated = " See `MAV_CMD_SET_MESSAGE_INTERVAL ` (Deprecated since 2015-08)"]
31166    REQUEST_DATA_STREAM(REQUEST_DATA_STREAM_DATA),
31167    REQUEST_EVENT(REQUEST_EVENT_DATA),
31168    RESOURCE_REQUEST(RESOURCE_REQUEST_DATA),
31169    RESPONSE_EVENT_ERROR(RESPONSE_EVENT_ERROR_DATA),
31170    SAFETY_ALLOWED_AREA(SAFETY_ALLOWED_AREA_DATA),
31171    SAFETY_SET_ALLOWED_AREA(SAFETY_SET_ALLOWED_AREA_DATA),
31172    SCALED_IMU(SCALED_IMU_DATA),
31173    SCALED_IMU2(SCALED_IMU2_DATA),
31174    SCALED_IMU3(SCALED_IMU3_DATA),
31175    SCALED_PRESSURE(SCALED_PRESSURE_DATA),
31176    SCALED_PRESSURE2(SCALED_PRESSURE2_DATA),
31177    SCALED_PRESSURE3(SCALED_PRESSURE3_DATA),
31178    SERIAL_CONTROL(SERIAL_CONTROL_DATA),
31179    SERVO_OUTPUT_RAW(SERVO_OUTPUT_RAW_DATA),
31180    SETUP_SIGNING(SETUP_SIGNING_DATA),
31181    SET_ACTUATOR_CONTROL_TARGET(SET_ACTUATOR_CONTROL_TARGET_DATA),
31182    SET_ATTITUDE_TARGET(SET_ATTITUDE_TARGET_DATA),
31183    #[deprecated = " See `MAV_CMD_SET_GLOBAL_ORIGIN` (Deprecated since 2025-04)"]
31184    SET_GPS_GLOBAL_ORIGIN(SET_GPS_GLOBAL_ORIGIN_DATA),
31185    #[deprecated = "The command protocol version (MAV_CMD_DO_SET_HOME) allows a GCS to detect when setting the home position has failed. See `MAV_CMD_DO_SET_HOME` (Deprecated since 2022-02)"]
31186    SET_HOME_POSITION(SET_HOME_POSITION_DATA),
31187    #[deprecated = "Use COMMAND_LONG with MAV_CMD_DO_SET_MODE instead. See `MAV_CMD_DO_SET_MODE` (Deprecated since 2015-12)"]
31188    SET_MODE(SET_MODE_DATA),
31189    SET_POSITION_TARGET_GLOBAL_INT(SET_POSITION_TARGET_GLOBAL_INT_DATA),
31190    SET_POSITION_TARGET_LOCAL_NED(SET_POSITION_TARGET_LOCAL_NED_DATA),
31191    SIM_STATE(SIM_STATE_DATA),
31192    #[deprecated = "The BATTERY_INFO message is better aligned with UAVCAN messages, and in any case is useful even if a battery is not \"smart\". See `BATTERY_INFO` (Deprecated since 2024-02)"]
31193    SMART_BATTERY_INFO(SMART_BATTERY_INFO_DATA),
31194    STATUSTEXT(STATUSTEXT_DATA),
31195    STORAGE_INFORMATION(STORAGE_INFORMATION_DATA),
31196    SUPPORTED_TUNES(SUPPORTED_TUNES_DATA),
31197    SYSTEM_TIME(SYSTEM_TIME_DATA),
31198    SYS_STATUS(SYS_STATUS_DATA),
31199    TERRAIN_CHECK(TERRAIN_CHECK_DATA),
31200    TERRAIN_DATA(TERRAIN_DATA_DATA),
31201    TERRAIN_REPORT(TERRAIN_REPORT_DATA),
31202    TERRAIN_REQUEST(TERRAIN_REQUEST_DATA),
31203    TIMESYNC(TIMESYNC_DATA),
31204    TIME_ESTIMATE_TO_TARGET(TIME_ESTIMATE_TO_TARGET_DATA),
31205    TRAJECTORY_REPRESENTATION_BEZIER(TRAJECTORY_REPRESENTATION_BEZIER_DATA),
31206    TRAJECTORY_REPRESENTATION_WAYPOINTS(TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA),
31207    TUNNEL(TUNNEL_DATA),
31208    UAVCAN_NODE_INFO(UAVCAN_NODE_INFO_DATA),
31209    UAVCAN_NODE_STATUS(UAVCAN_NODE_STATUS_DATA),
31210    UTM_GLOBAL_POSITION(UTM_GLOBAL_POSITION_DATA),
31211    V2_EXTENSION(V2_EXTENSION_DATA),
31212    VFR_HUD(VFR_HUD_DATA),
31213    VIBRATION(VIBRATION_DATA),
31214    VICON_POSITION_ESTIMATE(VICON_POSITION_ESTIMATE_DATA),
31215    VIDEO_STREAM_INFORMATION(VIDEO_STREAM_INFORMATION_DATA),
31216    VIDEO_STREAM_STATUS(VIDEO_STREAM_STATUS_DATA),
31217    VISION_POSITION_ESTIMATE(VISION_POSITION_ESTIMATE_DATA),
31218    VISION_SPEED_ESTIMATE(VISION_SPEED_ESTIMATE_DATA),
31219    WHEEL_DISTANCE(WHEEL_DISTANCE_DATA),
31220    WIFI_CONFIG_AP(WIFI_CONFIG_AP_DATA),
31221    WINCH_STATUS(WINCH_STATUS_DATA),
31222    WIND_COV(WIND_COV_DATA),
31223}
31224impl MavMessage {
31225    pub const fn all_ids() -> &'static [u32] {
31226        &[
31227            0u32, 1u32, 2u32, 4u32, 5u32, 6u32, 7u32, 8u32, 11u32, 20u32, 21u32, 22u32, 23u32,
31228            24u32, 25u32, 26u32, 27u32, 28u32, 29u32, 30u32, 31u32, 32u32, 33u32, 34u32, 35u32,
31229            36u32, 37u32, 38u32, 39u32, 40u32, 41u32, 42u32, 43u32, 44u32, 45u32, 46u32, 47u32,
31230            48u32, 49u32, 50u32, 51u32, 54u32, 55u32, 61u32, 62u32, 63u32, 64u32, 65u32, 66u32,
31231            67u32, 69u32, 70u32, 73u32, 74u32, 75u32, 76u32, 77u32, 80u32, 81u32, 82u32, 83u32,
31232            84u32, 85u32, 86u32, 87u32, 89u32, 90u32, 91u32, 92u32, 93u32, 100u32, 101u32, 102u32,
31233            103u32, 104u32, 105u32, 106u32, 107u32, 108u32, 109u32, 110u32, 111u32, 112u32, 113u32,
31234            114u32, 115u32, 116u32, 117u32, 118u32, 119u32, 120u32, 121u32, 122u32, 123u32, 124u32,
31235            125u32, 126u32, 127u32, 128u32, 129u32, 130u32, 131u32, 132u32, 133u32, 134u32, 135u32,
31236            136u32, 137u32, 138u32, 139u32, 140u32, 141u32, 142u32, 143u32, 144u32, 146u32, 147u32,
31237            148u32, 149u32, 162u32, 192u32, 225u32, 230u32, 231u32, 232u32, 233u32, 234u32, 235u32,
31238            241u32, 242u32, 243u32, 244u32, 245u32, 246u32, 247u32, 248u32, 249u32, 250u32, 251u32,
31239            252u32, 253u32, 254u32, 256u32, 257u32, 258u32, 259u32, 260u32, 261u32, 262u32, 263u32,
31240            264u32, 265u32, 266u32, 267u32, 268u32, 269u32, 270u32, 271u32, 275u32, 276u32, 277u32,
31241            280u32, 281u32, 282u32, 283u32, 284u32, 285u32, 286u32, 287u32, 288u32, 290u32, 291u32,
31242            299u32, 300u32, 301u32, 310u32, 311u32, 320u32, 321u32, 322u32, 323u32, 324u32, 330u32,
31243            331u32, 332u32, 333u32, 334u32, 335u32, 336u32, 339u32, 340u32, 350u32, 360u32, 370u32,
31244            371u32, 372u32, 373u32, 375u32, 380u32, 385u32, 386u32, 387u32, 388u32, 390u32, 395u32,
31245            396u32, 397u32, 400u32, 401u32, 410u32, 411u32, 412u32, 413u32, 435u32, 436u32, 437u32,
31246            440u32, 9000u32, 9005u32, 12900u32, 12901u32, 12902u32, 12903u32, 12904u32, 12905u32,
31247            12915u32, 12918u32, 12919u32, 12920u32,
31248        ]
31249    }
31250}
31251impl Message for MavMessage {
31252    fn parse(
31253        version: MavlinkVersion,
31254        id: u32,
31255        payload: &[u8],
31256    ) -> Result<Self, ::mavlink_core::error::ParserError> {
31257        match id {
31258            ACTUATOR_CONTROL_TARGET_DATA::ID => {
31259                ACTUATOR_CONTROL_TARGET_DATA::deser(version, payload)
31260                    .map(Self::ACTUATOR_CONTROL_TARGET)
31261            }
31262            ACTUATOR_OUTPUT_STATUS_DATA::ID => ACTUATOR_OUTPUT_STATUS_DATA::deser(version, payload)
31263                .map(Self::ACTUATOR_OUTPUT_STATUS),
31264            ADSB_VEHICLE_DATA::ID => {
31265                ADSB_VEHICLE_DATA::deser(version, payload).map(Self::ADSB_VEHICLE)
31266            }
31267            AIS_VESSEL_DATA::ID => AIS_VESSEL_DATA::deser(version, payload).map(Self::AIS_VESSEL),
31268            ALTITUDE_DATA::ID => ALTITUDE_DATA::deser(version, payload).map(Self::ALTITUDE),
31269            ATTITUDE_DATA::ID => ATTITUDE_DATA::deser(version, payload).map(Self::ATTITUDE),
31270            ATTITUDE_QUATERNION_DATA::ID => {
31271                ATTITUDE_QUATERNION_DATA::deser(version, payload).map(Self::ATTITUDE_QUATERNION)
31272            }
31273            ATTITUDE_QUATERNION_COV_DATA::ID => {
31274                ATTITUDE_QUATERNION_COV_DATA::deser(version, payload)
31275                    .map(Self::ATTITUDE_QUATERNION_COV)
31276            }
31277            ATTITUDE_TARGET_DATA::ID => {
31278                ATTITUDE_TARGET_DATA::deser(version, payload).map(Self::ATTITUDE_TARGET)
31279            }
31280            ATT_POS_MOCAP_DATA::ID => {
31281                ATT_POS_MOCAP_DATA::deser(version, payload).map(Self::ATT_POS_MOCAP)
31282            }
31283            AUTH_KEY_DATA::ID => AUTH_KEY_DATA::deser(version, payload).map(Self::AUTH_KEY),
31284            AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA::ID => {
31285                AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA::deser(version, payload)
31286                    .map(Self::AUTOPILOT_STATE_FOR_GIMBAL_DEVICE)
31287            }
31288            AUTOPILOT_VERSION_DATA::ID => {
31289                AUTOPILOT_VERSION_DATA::deser(version, payload).map(Self::AUTOPILOT_VERSION)
31290            }
31291            AVAILABLE_MODES_DATA::ID => {
31292                AVAILABLE_MODES_DATA::deser(version, payload).map(Self::AVAILABLE_MODES)
31293            }
31294            AVAILABLE_MODES_MONITOR_DATA::ID => {
31295                AVAILABLE_MODES_MONITOR_DATA::deser(version, payload)
31296                    .map(Self::AVAILABLE_MODES_MONITOR)
31297            }
31298            BATTERY_INFO_DATA::ID => {
31299                BATTERY_INFO_DATA::deser(version, payload).map(Self::BATTERY_INFO)
31300            }
31301            BATTERY_STATUS_DATA::ID => {
31302                BATTERY_STATUS_DATA::deser(version, payload).map(Self::BATTERY_STATUS)
31303            }
31304            BUTTON_CHANGE_DATA::ID => {
31305                BUTTON_CHANGE_DATA::deser(version, payload).map(Self::BUTTON_CHANGE)
31306            }
31307            CAMERA_CAPTURE_STATUS_DATA::ID => {
31308                CAMERA_CAPTURE_STATUS_DATA::deser(version, payload).map(Self::CAMERA_CAPTURE_STATUS)
31309            }
31310            CAMERA_FOV_STATUS_DATA::ID => {
31311                CAMERA_FOV_STATUS_DATA::deser(version, payload).map(Self::CAMERA_FOV_STATUS)
31312            }
31313            CAMERA_IMAGE_CAPTURED_DATA::ID => {
31314                CAMERA_IMAGE_CAPTURED_DATA::deser(version, payload).map(Self::CAMERA_IMAGE_CAPTURED)
31315            }
31316            CAMERA_INFORMATION_DATA::ID => {
31317                CAMERA_INFORMATION_DATA::deser(version, payload).map(Self::CAMERA_INFORMATION)
31318            }
31319            CAMERA_SETTINGS_DATA::ID => {
31320                CAMERA_SETTINGS_DATA::deser(version, payload).map(Self::CAMERA_SETTINGS)
31321            }
31322            CAMERA_THERMAL_RANGE_DATA::ID => {
31323                CAMERA_THERMAL_RANGE_DATA::deser(version, payload).map(Self::CAMERA_THERMAL_RANGE)
31324            }
31325            CAMERA_TRACKING_GEO_STATUS_DATA::ID => {
31326                CAMERA_TRACKING_GEO_STATUS_DATA::deser(version, payload)
31327                    .map(Self::CAMERA_TRACKING_GEO_STATUS)
31328            }
31329            CAMERA_TRACKING_IMAGE_STATUS_DATA::ID => {
31330                CAMERA_TRACKING_IMAGE_STATUS_DATA::deser(version, payload)
31331                    .map(Self::CAMERA_TRACKING_IMAGE_STATUS)
31332            }
31333            CAMERA_TRIGGER_DATA::ID => {
31334                CAMERA_TRIGGER_DATA::deser(version, payload).map(Self::CAMERA_TRIGGER)
31335            }
31336            CANFD_FRAME_DATA::ID => {
31337                CANFD_FRAME_DATA::deser(version, payload).map(Self::CANFD_FRAME)
31338            }
31339            CAN_FILTER_MODIFY_DATA::ID => {
31340                CAN_FILTER_MODIFY_DATA::deser(version, payload).map(Self::CAN_FILTER_MODIFY)
31341            }
31342            CAN_FRAME_DATA::ID => CAN_FRAME_DATA::deser(version, payload).map(Self::CAN_FRAME),
31343            CELLULAR_CONFIG_DATA::ID => {
31344                CELLULAR_CONFIG_DATA::deser(version, payload).map(Self::CELLULAR_CONFIG)
31345            }
31346            CELLULAR_STATUS_DATA::ID => {
31347                CELLULAR_STATUS_DATA::deser(version, payload).map(Self::CELLULAR_STATUS)
31348            }
31349            CHANGE_OPERATOR_CONTROL_DATA::ID => {
31350                CHANGE_OPERATOR_CONTROL_DATA::deser(version, payload)
31351                    .map(Self::CHANGE_OPERATOR_CONTROL)
31352            }
31353            CHANGE_OPERATOR_CONTROL_ACK_DATA::ID => {
31354                CHANGE_OPERATOR_CONTROL_ACK_DATA::deser(version, payload)
31355                    .map(Self::CHANGE_OPERATOR_CONTROL_ACK)
31356            }
31357            COLLISION_DATA::ID => COLLISION_DATA::deser(version, payload).map(Self::COLLISION),
31358            COMMAND_ACK_DATA::ID => {
31359                COMMAND_ACK_DATA::deser(version, payload).map(Self::COMMAND_ACK)
31360            }
31361            COMMAND_CANCEL_DATA::ID => {
31362                COMMAND_CANCEL_DATA::deser(version, payload).map(Self::COMMAND_CANCEL)
31363            }
31364            COMMAND_INT_DATA::ID => {
31365                COMMAND_INT_DATA::deser(version, payload).map(Self::COMMAND_INT)
31366            }
31367            COMMAND_LONG_DATA::ID => {
31368                COMMAND_LONG_DATA::deser(version, payload).map(Self::COMMAND_LONG)
31369            }
31370            COMPONENT_INFORMATION_DATA::ID => {
31371                COMPONENT_INFORMATION_DATA::deser(version, payload).map(Self::COMPONENT_INFORMATION)
31372            }
31373            COMPONENT_INFORMATION_BASIC_DATA::ID => {
31374                COMPONENT_INFORMATION_BASIC_DATA::deser(version, payload)
31375                    .map(Self::COMPONENT_INFORMATION_BASIC)
31376            }
31377            COMPONENT_METADATA_DATA::ID => {
31378                COMPONENT_METADATA_DATA::deser(version, payload).map(Self::COMPONENT_METADATA)
31379            }
31380            CONTROL_SYSTEM_STATE_DATA::ID => {
31381                CONTROL_SYSTEM_STATE_DATA::deser(version, payload).map(Self::CONTROL_SYSTEM_STATE)
31382            }
31383            CURRENT_EVENT_SEQUENCE_DATA::ID => CURRENT_EVENT_SEQUENCE_DATA::deser(version, payload)
31384                .map(Self::CURRENT_EVENT_SEQUENCE),
31385            CURRENT_MODE_DATA::ID => {
31386                CURRENT_MODE_DATA::deser(version, payload).map(Self::CURRENT_MODE)
31387            }
31388            DATA_STREAM_DATA::ID => {
31389                DATA_STREAM_DATA::deser(version, payload).map(Self::DATA_STREAM)
31390            }
31391            DATA_TRANSMISSION_HANDSHAKE_DATA::ID => {
31392                DATA_TRANSMISSION_HANDSHAKE_DATA::deser(version, payload)
31393                    .map(Self::DATA_TRANSMISSION_HANDSHAKE)
31394            }
31395            DEBUG_DATA::ID => DEBUG_DATA::deser(version, payload).map(Self::DEBUG),
31396            DEBUG_FLOAT_ARRAY_DATA::ID => {
31397                DEBUG_FLOAT_ARRAY_DATA::deser(version, payload).map(Self::DEBUG_FLOAT_ARRAY)
31398            }
31399            DEBUG_VECT_DATA::ID => DEBUG_VECT_DATA::deser(version, payload).map(Self::DEBUG_VECT),
31400            DISTANCE_SENSOR_DATA::ID => {
31401                DISTANCE_SENSOR_DATA::deser(version, payload).map(Self::DISTANCE_SENSOR)
31402            }
31403            EFI_STATUS_DATA::ID => EFI_STATUS_DATA::deser(version, payload).map(Self::EFI_STATUS),
31404            ENCAPSULATED_DATA_DATA::ID => {
31405                ENCAPSULATED_DATA_DATA::deser(version, payload).map(Self::ENCAPSULATED_DATA)
31406            }
31407            ESC_INFO_DATA::ID => ESC_INFO_DATA::deser(version, payload).map(Self::ESC_INFO),
31408            ESC_STATUS_DATA::ID => ESC_STATUS_DATA::deser(version, payload).map(Self::ESC_STATUS),
31409            ESTIMATOR_STATUS_DATA::ID => {
31410                ESTIMATOR_STATUS_DATA::deser(version, payload).map(Self::ESTIMATOR_STATUS)
31411            }
31412            EVENT_DATA::ID => EVENT_DATA::deser(version, payload).map(Self::EVENT),
31413            EXTENDED_SYS_STATE_DATA::ID => {
31414                EXTENDED_SYS_STATE_DATA::deser(version, payload).map(Self::EXTENDED_SYS_STATE)
31415            }
31416            FENCE_STATUS_DATA::ID => {
31417                FENCE_STATUS_DATA::deser(version, payload).map(Self::FENCE_STATUS)
31418            }
31419            FILE_TRANSFER_PROTOCOL_DATA::ID => FILE_TRANSFER_PROTOCOL_DATA::deser(version, payload)
31420                .map(Self::FILE_TRANSFER_PROTOCOL),
31421            FLIGHT_INFORMATION_DATA::ID => {
31422                FLIGHT_INFORMATION_DATA::deser(version, payload).map(Self::FLIGHT_INFORMATION)
31423            }
31424            FOLLOW_TARGET_DATA::ID => {
31425                FOLLOW_TARGET_DATA::deser(version, payload).map(Self::FOLLOW_TARGET)
31426            }
31427            FUEL_STATUS_DATA::ID => {
31428                FUEL_STATUS_DATA::deser(version, payload).map(Self::FUEL_STATUS)
31429            }
31430            GENERATOR_STATUS_DATA::ID => {
31431                GENERATOR_STATUS_DATA::deser(version, payload).map(Self::GENERATOR_STATUS)
31432            }
31433            GIMBAL_DEVICE_ATTITUDE_STATUS_DATA::ID => {
31434                GIMBAL_DEVICE_ATTITUDE_STATUS_DATA::deser(version, payload)
31435                    .map(Self::GIMBAL_DEVICE_ATTITUDE_STATUS)
31436            }
31437            GIMBAL_DEVICE_INFORMATION_DATA::ID => {
31438                GIMBAL_DEVICE_INFORMATION_DATA::deser(version, payload)
31439                    .map(Self::GIMBAL_DEVICE_INFORMATION)
31440            }
31441            GIMBAL_DEVICE_SET_ATTITUDE_DATA::ID => {
31442                GIMBAL_DEVICE_SET_ATTITUDE_DATA::deser(version, payload)
31443                    .map(Self::GIMBAL_DEVICE_SET_ATTITUDE)
31444            }
31445            GIMBAL_MANAGER_INFORMATION_DATA::ID => {
31446                GIMBAL_MANAGER_INFORMATION_DATA::deser(version, payload)
31447                    .map(Self::GIMBAL_MANAGER_INFORMATION)
31448            }
31449            GIMBAL_MANAGER_SET_ATTITUDE_DATA::ID => {
31450                GIMBAL_MANAGER_SET_ATTITUDE_DATA::deser(version, payload)
31451                    .map(Self::GIMBAL_MANAGER_SET_ATTITUDE)
31452            }
31453            GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA::ID => {
31454                GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA::deser(version, payload)
31455                    .map(Self::GIMBAL_MANAGER_SET_MANUAL_CONTROL)
31456            }
31457            GIMBAL_MANAGER_SET_PITCHYAW_DATA::ID => {
31458                GIMBAL_MANAGER_SET_PITCHYAW_DATA::deser(version, payload)
31459                    .map(Self::GIMBAL_MANAGER_SET_PITCHYAW)
31460            }
31461            GIMBAL_MANAGER_STATUS_DATA::ID => {
31462                GIMBAL_MANAGER_STATUS_DATA::deser(version, payload).map(Self::GIMBAL_MANAGER_STATUS)
31463            }
31464            GLOBAL_POSITION_INT_DATA::ID => {
31465                GLOBAL_POSITION_INT_DATA::deser(version, payload).map(Self::GLOBAL_POSITION_INT)
31466            }
31467            GLOBAL_POSITION_INT_COV_DATA::ID => {
31468                GLOBAL_POSITION_INT_COV_DATA::deser(version, payload)
31469                    .map(Self::GLOBAL_POSITION_INT_COV)
31470            }
31471            GLOBAL_VISION_POSITION_ESTIMATE_DATA::ID => {
31472                GLOBAL_VISION_POSITION_ESTIMATE_DATA::deser(version, payload)
31473                    .map(Self::GLOBAL_VISION_POSITION_ESTIMATE)
31474            }
31475            GPS2_RAW_DATA::ID => GPS2_RAW_DATA::deser(version, payload).map(Self::GPS2_RAW),
31476            GPS2_RTK_DATA::ID => GPS2_RTK_DATA::deser(version, payload).map(Self::GPS2_RTK),
31477            GPS_GLOBAL_ORIGIN_DATA::ID => {
31478                GPS_GLOBAL_ORIGIN_DATA::deser(version, payload).map(Self::GPS_GLOBAL_ORIGIN)
31479            }
31480            GPS_INJECT_DATA_DATA::ID => {
31481                GPS_INJECT_DATA_DATA::deser(version, payload).map(Self::GPS_INJECT_DATA)
31482            }
31483            GPS_INPUT_DATA::ID => GPS_INPUT_DATA::deser(version, payload).map(Self::GPS_INPUT),
31484            GPS_RAW_INT_DATA::ID => {
31485                GPS_RAW_INT_DATA::deser(version, payload).map(Self::GPS_RAW_INT)
31486            }
31487            GPS_RTCM_DATA_DATA::ID => {
31488                GPS_RTCM_DATA_DATA::deser(version, payload).map(Self::GPS_RTCM_DATA)
31489            }
31490            GPS_RTK_DATA::ID => GPS_RTK_DATA::deser(version, payload).map(Self::GPS_RTK),
31491            GPS_STATUS_DATA::ID => GPS_STATUS_DATA::deser(version, payload).map(Self::GPS_STATUS),
31492            HEARTBEAT_DATA::ID => HEARTBEAT_DATA::deser(version, payload).map(Self::HEARTBEAT),
31493            HIGHRES_IMU_DATA::ID => {
31494                HIGHRES_IMU_DATA::deser(version, payload).map(Self::HIGHRES_IMU)
31495            }
31496            HIGH_LATENCY_DATA::ID => {
31497                HIGH_LATENCY_DATA::deser(version, payload).map(Self::HIGH_LATENCY)
31498            }
31499            HIGH_LATENCY2_DATA::ID => {
31500                HIGH_LATENCY2_DATA::deser(version, payload).map(Self::HIGH_LATENCY2)
31501            }
31502            HIL_ACTUATOR_CONTROLS_DATA::ID => {
31503                HIL_ACTUATOR_CONTROLS_DATA::deser(version, payload).map(Self::HIL_ACTUATOR_CONTROLS)
31504            }
31505            HIL_CONTROLS_DATA::ID => {
31506                HIL_CONTROLS_DATA::deser(version, payload).map(Self::HIL_CONTROLS)
31507            }
31508            HIL_GPS_DATA::ID => HIL_GPS_DATA::deser(version, payload).map(Self::HIL_GPS),
31509            HIL_OPTICAL_FLOW_DATA::ID => {
31510                HIL_OPTICAL_FLOW_DATA::deser(version, payload).map(Self::HIL_OPTICAL_FLOW)
31511            }
31512            HIL_RC_INPUTS_RAW_DATA::ID => {
31513                HIL_RC_INPUTS_RAW_DATA::deser(version, payload).map(Self::HIL_RC_INPUTS_RAW)
31514            }
31515            HIL_SENSOR_DATA::ID => HIL_SENSOR_DATA::deser(version, payload).map(Self::HIL_SENSOR),
31516            HIL_STATE_DATA::ID => HIL_STATE_DATA::deser(version, payload).map(Self::HIL_STATE),
31517            HIL_STATE_QUATERNION_DATA::ID => {
31518                HIL_STATE_QUATERNION_DATA::deser(version, payload).map(Self::HIL_STATE_QUATERNION)
31519            }
31520            HOME_POSITION_DATA::ID => {
31521                HOME_POSITION_DATA::deser(version, payload).map(Self::HOME_POSITION)
31522            }
31523            HYGROMETER_SENSOR_DATA::ID => {
31524                HYGROMETER_SENSOR_DATA::deser(version, payload).map(Self::HYGROMETER_SENSOR)
31525            }
31526            ILLUMINATOR_STATUS_DATA::ID => {
31527                ILLUMINATOR_STATUS_DATA::deser(version, payload).map(Self::ILLUMINATOR_STATUS)
31528            }
31529            ISBD_LINK_STATUS_DATA::ID => {
31530                ISBD_LINK_STATUS_DATA::deser(version, payload).map(Self::ISBD_LINK_STATUS)
31531            }
31532            LANDING_TARGET_DATA::ID => {
31533                LANDING_TARGET_DATA::deser(version, payload).map(Self::LANDING_TARGET)
31534            }
31535            LINK_NODE_STATUS_DATA::ID => {
31536                LINK_NODE_STATUS_DATA::deser(version, payload).map(Self::LINK_NODE_STATUS)
31537            }
31538            LOCAL_POSITION_NED_DATA::ID => {
31539                LOCAL_POSITION_NED_DATA::deser(version, payload).map(Self::LOCAL_POSITION_NED)
31540            }
31541            LOCAL_POSITION_NED_COV_DATA::ID => LOCAL_POSITION_NED_COV_DATA::deser(version, payload)
31542                .map(Self::LOCAL_POSITION_NED_COV),
31543            LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA::ID => {
31544                LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA::deser(version, payload)
31545                    .map(Self::LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET)
31546            }
31547            LOGGING_ACK_DATA::ID => {
31548                LOGGING_ACK_DATA::deser(version, payload).map(Self::LOGGING_ACK)
31549            }
31550            LOGGING_DATA_DATA::ID => {
31551                LOGGING_DATA_DATA::deser(version, payload).map(Self::LOGGING_DATA)
31552            }
31553            LOGGING_DATA_ACKED_DATA::ID => {
31554                LOGGING_DATA_ACKED_DATA::deser(version, payload).map(Self::LOGGING_DATA_ACKED)
31555            }
31556            LOG_DATA_DATA::ID => LOG_DATA_DATA::deser(version, payload).map(Self::LOG_DATA),
31557            LOG_ENTRY_DATA::ID => LOG_ENTRY_DATA::deser(version, payload).map(Self::LOG_ENTRY),
31558            LOG_ERASE_DATA::ID => LOG_ERASE_DATA::deser(version, payload).map(Self::LOG_ERASE),
31559            LOG_REQUEST_DATA_DATA::ID => {
31560                LOG_REQUEST_DATA_DATA::deser(version, payload).map(Self::LOG_REQUEST_DATA)
31561            }
31562            LOG_REQUEST_END_DATA::ID => {
31563                LOG_REQUEST_END_DATA::deser(version, payload).map(Self::LOG_REQUEST_END)
31564            }
31565            LOG_REQUEST_LIST_DATA::ID => {
31566                LOG_REQUEST_LIST_DATA::deser(version, payload).map(Self::LOG_REQUEST_LIST)
31567            }
31568            MAG_CAL_REPORT_DATA::ID => {
31569                MAG_CAL_REPORT_DATA::deser(version, payload).map(Self::MAG_CAL_REPORT)
31570            }
31571            MANUAL_CONTROL_DATA::ID => {
31572                MANUAL_CONTROL_DATA::deser(version, payload).map(Self::MANUAL_CONTROL)
31573            }
31574            MANUAL_SETPOINT_DATA::ID => {
31575                MANUAL_SETPOINT_DATA::deser(version, payload).map(Self::MANUAL_SETPOINT)
31576            }
31577            MEMORY_VECT_DATA::ID => {
31578                MEMORY_VECT_DATA::deser(version, payload).map(Self::MEMORY_VECT)
31579            }
31580            MESSAGE_INTERVAL_DATA::ID => {
31581                MESSAGE_INTERVAL_DATA::deser(version, payload).map(Self::MESSAGE_INTERVAL)
31582            }
31583            MISSION_ACK_DATA::ID => {
31584                MISSION_ACK_DATA::deser(version, payload).map(Self::MISSION_ACK)
31585            }
31586            MISSION_CLEAR_ALL_DATA::ID => {
31587                MISSION_CLEAR_ALL_DATA::deser(version, payload).map(Self::MISSION_CLEAR_ALL)
31588            }
31589            MISSION_COUNT_DATA::ID => {
31590                MISSION_COUNT_DATA::deser(version, payload).map(Self::MISSION_COUNT)
31591            }
31592            MISSION_CURRENT_DATA::ID => {
31593                MISSION_CURRENT_DATA::deser(version, payload).map(Self::MISSION_CURRENT)
31594            }
31595            MISSION_ITEM_DATA::ID => {
31596                MISSION_ITEM_DATA::deser(version, payload).map(Self::MISSION_ITEM)
31597            }
31598            MISSION_ITEM_INT_DATA::ID => {
31599                MISSION_ITEM_INT_DATA::deser(version, payload).map(Self::MISSION_ITEM_INT)
31600            }
31601            MISSION_ITEM_REACHED_DATA::ID => {
31602                MISSION_ITEM_REACHED_DATA::deser(version, payload).map(Self::MISSION_ITEM_REACHED)
31603            }
31604            MISSION_REQUEST_DATA::ID => {
31605                MISSION_REQUEST_DATA::deser(version, payload).map(Self::MISSION_REQUEST)
31606            }
31607            MISSION_REQUEST_INT_DATA::ID => {
31608                MISSION_REQUEST_INT_DATA::deser(version, payload).map(Self::MISSION_REQUEST_INT)
31609            }
31610            MISSION_REQUEST_LIST_DATA::ID => {
31611                MISSION_REQUEST_LIST_DATA::deser(version, payload).map(Self::MISSION_REQUEST_LIST)
31612            }
31613            MISSION_REQUEST_PARTIAL_LIST_DATA::ID => {
31614                MISSION_REQUEST_PARTIAL_LIST_DATA::deser(version, payload)
31615                    .map(Self::MISSION_REQUEST_PARTIAL_LIST)
31616            }
31617            MISSION_SET_CURRENT_DATA::ID => {
31618                MISSION_SET_CURRENT_DATA::deser(version, payload).map(Self::MISSION_SET_CURRENT)
31619            }
31620            MISSION_WRITE_PARTIAL_LIST_DATA::ID => {
31621                MISSION_WRITE_PARTIAL_LIST_DATA::deser(version, payload)
31622                    .map(Self::MISSION_WRITE_PARTIAL_LIST)
31623            }
31624            MOUNT_ORIENTATION_DATA::ID => {
31625                MOUNT_ORIENTATION_DATA::deser(version, payload).map(Self::MOUNT_ORIENTATION)
31626            }
31627            NAMED_VALUE_FLOAT_DATA::ID => {
31628                NAMED_VALUE_FLOAT_DATA::deser(version, payload).map(Self::NAMED_VALUE_FLOAT)
31629            }
31630            NAMED_VALUE_INT_DATA::ID => {
31631                NAMED_VALUE_INT_DATA::deser(version, payload).map(Self::NAMED_VALUE_INT)
31632            }
31633            NAV_CONTROLLER_OUTPUT_DATA::ID => {
31634                NAV_CONTROLLER_OUTPUT_DATA::deser(version, payload).map(Self::NAV_CONTROLLER_OUTPUT)
31635            }
31636            OBSTACLE_DISTANCE_DATA::ID => {
31637                OBSTACLE_DISTANCE_DATA::deser(version, payload).map(Self::OBSTACLE_DISTANCE)
31638            }
31639            ODOMETRY_DATA::ID => ODOMETRY_DATA::deser(version, payload).map(Self::ODOMETRY),
31640            ONBOARD_COMPUTER_STATUS_DATA::ID => {
31641                ONBOARD_COMPUTER_STATUS_DATA::deser(version, payload)
31642                    .map(Self::ONBOARD_COMPUTER_STATUS)
31643            }
31644            OPEN_DRONE_ID_ARM_STATUS_DATA::ID => {
31645                OPEN_DRONE_ID_ARM_STATUS_DATA::deser(version, payload)
31646                    .map(Self::OPEN_DRONE_ID_ARM_STATUS)
31647            }
31648            OPEN_DRONE_ID_AUTHENTICATION_DATA::ID => {
31649                OPEN_DRONE_ID_AUTHENTICATION_DATA::deser(version, payload)
31650                    .map(Self::OPEN_DRONE_ID_AUTHENTICATION)
31651            }
31652            OPEN_DRONE_ID_BASIC_ID_DATA::ID => OPEN_DRONE_ID_BASIC_ID_DATA::deser(version, payload)
31653                .map(Self::OPEN_DRONE_ID_BASIC_ID),
31654            OPEN_DRONE_ID_LOCATION_DATA::ID => OPEN_DRONE_ID_LOCATION_DATA::deser(version, payload)
31655                .map(Self::OPEN_DRONE_ID_LOCATION),
31656            OPEN_DRONE_ID_MESSAGE_PACK_DATA::ID => {
31657                OPEN_DRONE_ID_MESSAGE_PACK_DATA::deser(version, payload)
31658                    .map(Self::OPEN_DRONE_ID_MESSAGE_PACK)
31659            }
31660            OPEN_DRONE_ID_OPERATOR_ID_DATA::ID => {
31661                OPEN_DRONE_ID_OPERATOR_ID_DATA::deser(version, payload)
31662                    .map(Self::OPEN_DRONE_ID_OPERATOR_ID)
31663            }
31664            OPEN_DRONE_ID_SELF_ID_DATA::ID => {
31665                OPEN_DRONE_ID_SELF_ID_DATA::deser(version, payload).map(Self::OPEN_DRONE_ID_SELF_ID)
31666            }
31667            OPEN_DRONE_ID_SYSTEM_DATA::ID => {
31668                OPEN_DRONE_ID_SYSTEM_DATA::deser(version, payload).map(Self::OPEN_DRONE_ID_SYSTEM)
31669            }
31670            OPEN_DRONE_ID_SYSTEM_UPDATE_DATA::ID => {
31671                OPEN_DRONE_ID_SYSTEM_UPDATE_DATA::deser(version, payload)
31672                    .map(Self::OPEN_DRONE_ID_SYSTEM_UPDATE)
31673            }
31674            OPTICAL_FLOW_DATA::ID => {
31675                OPTICAL_FLOW_DATA::deser(version, payload).map(Self::OPTICAL_FLOW)
31676            }
31677            OPTICAL_FLOW_RAD_DATA::ID => {
31678                OPTICAL_FLOW_RAD_DATA::deser(version, payload).map(Self::OPTICAL_FLOW_RAD)
31679            }
31680            ORBIT_EXECUTION_STATUS_DATA::ID => ORBIT_EXECUTION_STATUS_DATA::deser(version, payload)
31681                .map(Self::ORBIT_EXECUTION_STATUS),
31682            PARAM_EXT_ACK_DATA::ID => {
31683                PARAM_EXT_ACK_DATA::deser(version, payload).map(Self::PARAM_EXT_ACK)
31684            }
31685            PARAM_EXT_REQUEST_LIST_DATA::ID => PARAM_EXT_REQUEST_LIST_DATA::deser(version, payload)
31686                .map(Self::PARAM_EXT_REQUEST_LIST),
31687            PARAM_EXT_REQUEST_READ_DATA::ID => PARAM_EXT_REQUEST_READ_DATA::deser(version, payload)
31688                .map(Self::PARAM_EXT_REQUEST_READ),
31689            PARAM_EXT_SET_DATA::ID => {
31690                PARAM_EXT_SET_DATA::deser(version, payload).map(Self::PARAM_EXT_SET)
31691            }
31692            PARAM_EXT_VALUE_DATA::ID => {
31693                PARAM_EXT_VALUE_DATA::deser(version, payload).map(Self::PARAM_EXT_VALUE)
31694            }
31695            PARAM_MAP_RC_DATA::ID => {
31696                PARAM_MAP_RC_DATA::deser(version, payload).map(Self::PARAM_MAP_RC)
31697            }
31698            PARAM_REQUEST_LIST_DATA::ID => {
31699                PARAM_REQUEST_LIST_DATA::deser(version, payload).map(Self::PARAM_REQUEST_LIST)
31700            }
31701            PARAM_REQUEST_READ_DATA::ID => {
31702                PARAM_REQUEST_READ_DATA::deser(version, payload).map(Self::PARAM_REQUEST_READ)
31703            }
31704            PARAM_SET_DATA::ID => PARAM_SET_DATA::deser(version, payload).map(Self::PARAM_SET),
31705            PARAM_VALUE_DATA::ID => {
31706                PARAM_VALUE_DATA::deser(version, payload).map(Self::PARAM_VALUE)
31707            }
31708            PING_DATA::ID => PING_DATA::deser(version, payload).map(Self::PING),
31709            PLAY_TUNE_DATA::ID => PLAY_TUNE_DATA::deser(version, payload).map(Self::PLAY_TUNE),
31710            PLAY_TUNE_V2_DATA::ID => {
31711                PLAY_TUNE_V2_DATA::deser(version, payload).map(Self::PLAY_TUNE_V2)
31712            }
31713            POSITION_TARGET_GLOBAL_INT_DATA::ID => {
31714                POSITION_TARGET_GLOBAL_INT_DATA::deser(version, payload)
31715                    .map(Self::POSITION_TARGET_GLOBAL_INT)
31716            }
31717            POSITION_TARGET_LOCAL_NED_DATA::ID => {
31718                POSITION_TARGET_LOCAL_NED_DATA::deser(version, payload)
31719                    .map(Self::POSITION_TARGET_LOCAL_NED)
31720            }
31721            POWER_STATUS_DATA::ID => {
31722                POWER_STATUS_DATA::deser(version, payload).map(Self::POWER_STATUS)
31723            }
31724            PROTOCOL_VERSION_DATA::ID => {
31725                PROTOCOL_VERSION_DATA::deser(version, payload).map(Self::PROTOCOL_VERSION)
31726            }
31727            RADIO_STATUS_DATA::ID => {
31728                RADIO_STATUS_DATA::deser(version, payload).map(Self::RADIO_STATUS)
31729            }
31730            RAW_IMU_DATA::ID => RAW_IMU_DATA::deser(version, payload).map(Self::RAW_IMU),
31731            RAW_PRESSURE_DATA::ID => {
31732                RAW_PRESSURE_DATA::deser(version, payload).map(Self::RAW_PRESSURE)
31733            }
31734            RAW_RPM_DATA::ID => RAW_RPM_DATA::deser(version, payload).map(Self::RAW_RPM),
31735            RC_CHANNELS_DATA::ID => {
31736                RC_CHANNELS_DATA::deser(version, payload).map(Self::RC_CHANNELS)
31737            }
31738            RC_CHANNELS_OVERRIDE_DATA::ID => {
31739                RC_CHANNELS_OVERRIDE_DATA::deser(version, payload).map(Self::RC_CHANNELS_OVERRIDE)
31740            }
31741            RC_CHANNELS_RAW_DATA::ID => {
31742                RC_CHANNELS_RAW_DATA::deser(version, payload).map(Self::RC_CHANNELS_RAW)
31743            }
31744            RC_CHANNELS_SCALED_DATA::ID => {
31745                RC_CHANNELS_SCALED_DATA::deser(version, payload).map(Self::RC_CHANNELS_SCALED)
31746            }
31747            REQUEST_DATA_STREAM_DATA::ID => {
31748                REQUEST_DATA_STREAM_DATA::deser(version, payload).map(Self::REQUEST_DATA_STREAM)
31749            }
31750            REQUEST_EVENT_DATA::ID => {
31751                REQUEST_EVENT_DATA::deser(version, payload).map(Self::REQUEST_EVENT)
31752            }
31753            RESOURCE_REQUEST_DATA::ID => {
31754                RESOURCE_REQUEST_DATA::deser(version, payload).map(Self::RESOURCE_REQUEST)
31755            }
31756            RESPONSE_EVENT_ERROR_DATA::ID => {
31757                RESPONSE_EVENT_ERROR_DATA::deser(version, payload).map(Self::RESPONSE_EVENT_ERROR)
31758            }
31759            SAFETY_ALLOWED_AREA_DATA::ID => {
31760                SAFETY_ALLOWED_AREA_DATA::deser(version, payload).map(Self::SAFETY_ALLOWED_AREA)
31761            }
31762            SAFETY_SET_ALLOWED_AREA_DATA::ID => {
31763                SAFETY_SET_ALLOWED_AREA_DATA::deser(version, payload)
31764                    .map(Self::SAFETY_SET_ALLOWED_AREA)
31765            }
31766            SCALED_IMU_DATA::ID => SCALED_IMU_DATA::deser(version, payload).map(Self::SCALED_IMU),
31767            SCALED_IMU2_DATA::ID => {
31768                SCALED_IMU2_DATA::deser(version, payload).map(Self::SCALED_IMU2)
31769            }
31770            SCALED_IMU3_DATA::ID => {
31771                SCALED_IMU3_DATA::deser(version, payload).map(Self::SCALED_IMU3)
31772            }
31773            SCALED_PRESSURE_DATA::ID => {
31774                SCALED_PRESSURE_DATA::deser(version, payload).map(Self::SCALED_PRESSURE)
31775            }
31776            SCALED_PRESSURE2_DATA::ID => {
31777                SCALED_PRESSURE2_DATA::deser(version, payload).map(Self::SCALED_PRESSURE2)
31778            }
31779            SCALED_PRESSURE3_DATA::ID => {
31780                SCALED_PRESSURE3_DATA::deser(version, payload).map(Self::SCALED_PRESSURE3)
31781            }
31782            SERIAL_CONTROL_DATA::ID => {
31783                SERIAL_CONTROL_DATA::deser(version, payload).map(Self::SERIAL_CONTROL)
31784            }
31785            SERVO_OUTPUT_RAW_DATA::ID => {
31786                SERVO_OUTPUT_RAW_DATA::deser(version, payload).map(Self::SERVO_OUTPUT_RAW)
31787            }
31788            SETUP_SIGNING_DATA::ID => {
31789                SETUP_SIGNING_DATA::deser(version, payload).map(Self::SETUP_SIGNING)
31790            }
31791            SET_ACTUATOR_CONTROL_TARGET_DATA::ID => {
31792                SET_ACTUATOR_CONTROL_TARGET_DATA::deser(version, payload)
31793                    .map(Self::SET_ACTUATOR_CONTROL_TARGET)
31794            }
31795            SET_ATTITUDE_TARGET_DATA::ID => {
31796                SET_ATTITUDE_TARGET_DATA::deser(version, payload).map(Self::SET_ATTITUDE_TARGET)
31797            }
31798            SET_GPS_GLOBAL_ORIGIN_DATA::ID => {
31799                SET_GPS_GLOBAL_ORIGIN_DATA::deser(version, payload).map(Self::SET_GPS_GLOBAL_ORIGIN)
31800            }
31801            SET_HOME_POSITION_DATA::ID => {
31802                SET_HOME_POSITION_DATA::deser(version, payload).map(Self::SET_HOME_POSITION)
31803            }
31804            SET_MODE_DATA::ID => SET_MODE_DATA::deser(version, payload).map(Self::SET_MODE),
31805            SET_POSITION_TARGET_GLOBAL_INT_DATA::ID => {
31806                SET_POSITION_TARGET_GLOBAL_INT_DATA::deser(version, payload)
31807                    .map(Self::SET_POSITION_TARGET_GLOBAL_INT)
31808            }
31809            SET_POSITION_TARGET_LOCAL_NED_DATA::ID => {
31810                SET_POSITION_TARGET_LOCAL_NED_DATA::deser(version, payload)
31811                    .map(Self::SET_POSITION_TARGET_LOCAL_NED)
31812            }
31813            SIM_STATE_DATA::ID => SIM_STATE_DATA::deser(version, payload).map(Self::SIM_STATE),
31814            SMART_BATTERY_INFO_DATA::ID => {
31815                SMART_BATTERY_INFO_DATA::deser(version, payload).map(Self::SMART_BATTERY_INFO)
31816            }
31817            STATUSTEXT_DATA::ID => STATUSTEXT_DATA::deser(version, payload).map(Self::STATUSTEXT),
31818            STORAGE_INFORMATION_DATA::ID => {
31819                STORAGE_INFORMATION_DATA::deser(version, payload).map(Self::STORAGE_INFORMATION)
31820            }
31821            SUPPORTED_TUNES_DATA::ID => {
31822                SUPPORTED_TUNES_DATA::deser(version, payload).map(Self::SUPPORTED_TUNES)
31823            }
31824            SYSTEM_TIME_DATA::ID => {
31825                SYSTEM_TIME_DATA::deser(version, payload).map(Self::SYSTEM_TIME)
31826            }
31827            SYS_STATUS_DATA::ID => SYS_STATUS_DATA::deser(version, payload).map(Self::SYS_STATUS),
31828            TERRAIN_CHECK_DATA::ID => {
31829                TERRAIN_CHECK_DATA::deser(version, payload).map(Self::TERRAIN_CHECK)
31830            }
31831            TERRAIN_DATA_DATA::ID => {
31832                TERRAIN_DATA_DATA::deser(version, payload).map(Self::TERRAIN_DATA)
31833            }
31834            TERRAIN_REPORT_DATA::ID => {
31835                TERRAIN_REPORT_DATA::deser(version, payload).map(Self::TERRAIN_REPORT)
31836            }
31837            TERRAIN_REQUEST_DATA::ID => {
31838                TERRAIN_REQUEST_DATA::deser(version, payload).map(Self::TERRAIN_REQUEST)
31839            }
31840            TIMESYNC_DATA::ID => TIMESYNC_DATA::deser(version, payload).map(Self::TIMESYNC),
31841            TIME_ESTIMATE_TO_TARGET_DATA::ID => {
31842                TIME_ESTIMATE_TO_TARGET_DATA::deser(version, payload)
31843                    .map(Self::TIME_ESTIMATE_TO_TARGET)
31844            }
31845            TRAJECTORY_REPRESENTATION_BEZIER_DATA::ID => {
31846                TRAJECTORY_REPRESENTATION_BEZIER_DATA::deser(version, payload)
31847                    .map(Self::TRAJECTORY_REPRESENTATION_BEZIER)
31848            }
31849            TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA::ID => {
31850                TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA::deser(version, payload)
31851                    .map(Self::TRAJECTORY_REPRESENTATION_WAYPOINTS)
31852            }
31853            TUNNEL_DATA::ID => TUNNEL_DATA::deser(version, payload).map(Self::TUNNEL),
31854            UAVCAN_NODE_INFO_DATA::ID => {
31855                UAVCAN_NODE_INFO_DATA::deser(version, payload).map(Self::UAVCAN_NODE_INFO)
31856            }
31857            UAVCAN_NODE_STATUS_DATA::ID => {
31858                UAVCAN_NODE_STATUS_DATA::deser(version, payload).map(Self::UAVCAN_NODE_STATUS)
31859            }
31860            UTM_GLOBAL_POSITION_DATA::ID => {
31861                UTM_GLOBAL_POSITION_DATA::deser(version, payload).map(Self::UTM_GLOBAL_POSITION)
31862            }
31863            V2_EXTENSION_DATA::ID => {
31864                V2_EXTENSION_DATA::deser(version, payload).map(Self::V2_EXTENSION)
31865            }
31866            VFR_HUD_DATA::ID => VFR_HUD_DATA::deser(version, payload).map(Self::VFR_HUD),
31867            VIBRATION_DATA::ID => VIBRATION_DATA::deser(version, payload).map(Self::VIBRATION),
31868            VICON_POSITION_ESTIMATE_DATA::ID => {
31869                VICON_POSITION_ESTIMATE_DATA::deser(version, payload)
31870                    .map(Self::VICON_POSITION_ESTIMATE)
31871            }
31872            VIDEO_STREAM_INFORMATION_DATA::ID => {
31873                VIDEO_STREAM_INFORMATION_DATA::deser(version, payload)
31874                    .map(Self::VIDEO_STREAM_INFORMATION)
31875            }
31876            VIDEO_STREAM_STATUS_DATA::ID => {
31877                VIDEO_STREAM_STATUS_DATA::deser(version, payload).map(Self::VIDEO_STREAM_STATUS)
31878            }
31879            VISION_POSITION_ESTIMATE_DATA::ID => {
31880                VISION_POSITION_ESTIMATE_DATA::deser(version, payload)
31881                    .map(Self::VISION_POSITION_ESTIMATE)
31882            }
31883            VISION_SPEED_ESTIMATE_DATA::ID => {
31884                VISION_SPEED_ESTIMATE_DATA::deser(version, payload).map(Self::VISION_SPEED_ESTIMATE)
31885            }
31886            WHEEL_DISTANCE_DATA::ID => {
31887                WHEEL_DISTANCE_DATA::deser(version, payload).map(Self::WHEEL_DISTANCE)
31888            }
31889            WIFI_CONFIG_AP_DATA::ID => {
31890                WIFI_CONFIG_AP_DATA::deser(version, payload).map(Self::WIFI_CONFIG_AP)
31891            }
31892            WINCH_STATUS_DATA::ID => {
31893                WINCH_STATUS_DATA::deser(version, payload).map(Self::WINCH_STATUS)
31894            }
31895            WIND_COV_DATA::ID => WIND_COV_DATA::deser(version, payload).map(Self::WIND_COV),
31896            _ => Err(::mavlink_core::error::ParserError::UnknownMessage { id }),
31897        }
31898    }
31899    fn message_name(&self) -> &'static str {
31900        match self {
31901            Self::ACTUATOR_CONTROL_TARGET(..) => ACTUATOR_CONTROL_TARGET_DATA::NAME,
31902            Self::ACTUATOR_OUTPUT_STATUS(..) => ACTUATOR_OUTPUT_STATUS_DATA::NAME,
31903            Self::ADSB_VEHICLE(..) => ADSB_VEHICLE_DATA::NAME,
31904            Self::AIS_VESSEL(..) => AIS_VESSEL_DATA::NAME,
31905            Self::ALTITUDE(..) => ALTITUDE_DATA::NAME,
31906            Self::ATTITUDE(..) => ATTITUDE_DATA::NAME,
31907            Self::ATTITUDE_QUATERNION(..) => ATTITUDE_QUATERNION_DATA::NAME,
31908            Self::ATTITUDE_QUATERNION_COV(..) => ATTITUDE_QUATERNION_COV_DATA::NAME,
31909            Self::ATTITUDE_TARGET(..) => ATTITUDE_TARGET_DATA::NAME,
31910            Self::ATT_POS_MOCAP(..) => ATT_POS_MOCAP_DATA::NAME,
31911            Self::AUTH_KEY(..) => AUTH_KEY_DATA::NAME,
31912            Self::AUTOPILOT_STATE_FOR_GIMBAL_DEVICE(..) => {
31913                AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA::NAME
31914            }
31915            Self::AUTOPILOT_VERSION(..) => AUTOPILOT_VERSION_DATA::NAME,
31916            Self::AVAILABLE_MODES(..) => AVAILABLE_MODES_DATA::NAME,
31917            Self::AVAILABLE_MODES_MONITOR(..) => AVAILABLE_MODES_MONITOR_DATA::NAME,
31918            Self::BATTERY_INFO(..) => BATTERY_INFO_DATA::NAME,
31919            Self::BATTERY_STATUS(..) => BATTERY_STATUS_DATA::NAME,
31920            Self::BUTTON_CHANGE(..) => BUTTON_CHANGE_DATA::NAME,
31921            Self::CAMERA_CAPTURE_STATUS(..) => CAMERA_CAPTURE_STATUS_DATA::NAME,
31922            Self::CAMERA_FOV_STATUS(..) => CAMERA_FOV_STATUS_DATA::NAME,
31923            Self::CAMERA_IMAGE_CAPTURED(..) => CAMERA_IMAGE_CAPTURED_DATA::NAME,
31924            Self::CAMERA_INFORMATION(..) => CAMERA_INFORMATION_DATA::NAME,
31925            Self::CAMERA_SETTINGS(..) => CAMERA_SETTINGS_DATA::NAME,
31926            Self::CAMERA_THERMAL_RANGE(..) => CAMERA_THERMAL_RANGE_DATA::NAME,
31927            Self::CAMERA_TRACKING_GEO_STATUS(..) => CAMERA_TRACKING_GEO_STATUS_DATA::NAME,
31928            Self::CAMERA_TRACKING_IMAGE_STATUS(..) => CAMERA_TRACKING_IMAGE_STATUS_DATA::NAME,
31929            Self::CAMERA_TRIGGER(..) => CAMERA_TRIGGER_DATA::NAME,
31930            Self::CANFD_FRAME(..) => CANFD_FRAME_DATA::NAME,
31931            Self::CAN_FILTER_MODIFY(..) => CAN_FILTER_MODIFY_DATA::NAME,
31932            Self::CAN_FRAME(..) => CAN_FRAME_DATA::NAME,
31933            Self::CELLULAR_CONFIG(..) => CELLULAR_CONFIG_DATA::NAME,
31934            Self::CELLULAR_STATUS(..) => CELLULAR_STATUS_DATA::NAME,
31935            Self::CHANGE_OPERATOR_CONTROL(..) => CHANGE_OPERATOR_CONTROL_DATA::NAME,
31936            Self::CHANGE_OPERATOR_CONTROL_ACK(..) => CHANGE_OPERATOR_CONTROL_ACK_DATA::NAME,
31937            Self::COLLISION(..) => COLLISION_DATA::NAME,
31938            Self::COMMAND_ACK(..) => COMMAND_ACK_DATA::NAME,
31939            Self::COMMAND_CANCEL(..) => COMMAND_CANCEL_DATA::NAME,
31940            Self::COMMAND_INT(..) => COMMAND_INT_DATA::NAME,
31941            Self::COMMAND_LONG(..) => COMMAND_LONG_DATA::NAME,
31942            Self::COMPONENT_INFORMATION(..) => COMPONENT_INFORMATION_DATA::NAME,
31943            Self::COMPONENT_INFORMATION_BASIC(..) => COMPONENT_INFORMATION_BASIC_DATA::NAME,
31944            Self::COMPONENT_METADATA(..) => COMPONENT_METADATA_DATA::NAME,
31945            Self::CONTROL_SYSTEM_STATE(..) => CONTROL_SYSTEM_STATE_DATA::NAME,
31946            Self::CURRENT_EVENT_SEQUENCE(..) => CURRENT_EVENT_SEQUENCE_DATA::NAME,
31947            Self::CURRENT_MODE(..) => CURRENT_MODE_DATA::NAME,
31948            Self::DATA_STREAM(..) => DATA_STREAM_DATA::NAME,
31949            Self::DATA_TRANSMISSION_HANDSHAKE(..) => DATA_TRANSMISSION_HANDSHAKE_DATA::NAME,
31950            Self::DEBUG(..) => DEBUG_DATA::NAME,
31951            Self::DEBUG_FLOAT_ARRAY(..) => DEBUG_FLOAT_ARRAY_DATA::NAME,
31952            Self::DEBUG_VECT(..) => DEBUG_VECT_DATA::NAME,
31953            Self::DISTANCE_SENSOR(..) => DISTANCE_SENSOR_DATA::NAME,
31954            Self::EFI_STATUS(..) => EFI_STATUS_DATA::NAME,
31955            Self::ENCAPSULATED_DATA(..) => ENCAPSULATED_DATA_DATA::NAME,
31956            Self::ESC_INFO(..) => ESC_INFO_DATA::NAME,
31957            Self::ESC_STATUS(..) => ESC_STATUS_DATA::NAME,
31958            Self::ESTIMATOR_STATUS(..) => ESTIMATOR_STATUS_DATA::NAME,
31959            Self::EVENT(..) => EVENT_DATA::NAME,
31960            Self::EXTENDED_SYS_STATE(..) => EXTENDED_SYS_STATE_DATA::NAME,
31961            Self::FENCE_STATUS(..) => FENCE_STATUS_DATA::NAME,
31962            Self::FILE_TRANSFER_PROTOCOL(..) => FILE_TRANSFER_PROTOCOL_DATA::NAME,
31963            Self::FLIGHT_INFORMATION(..) => FLIGHT_INFORMATION_DATA::NAME,
31964            Self::FOLLOW_TARGET(..) => FOLLOW_TARGET_DATA::NAME,
31965            Self::FUEL_STATUS(..) => FUEL_STATUS_DATA::NAME,
31966            Self::GENERATOR_STATUS(..) => GENERATOR_STATUS_DATA::NAME,
31967            Self::GIMBAL_DEVICE_ATTITUDE_STATUS(..) => GIMBAL_DEVICE_ATTITUDE_STATUS_DATA::NAME,
31968            Self::GIMBAL_DEVICE_INFORMATION(..) => GIMBAL_DEVICE_INFORMATION_DATA::NAME,
31969            Self::GIMBAL_DEVICE_SET_ATTITUDE(..) => GIMBAL_DEVICE_SET_ATTITUDE_DATA::NAME,
31970            Self::GIMBAL_MANAGER_INFORMATION(..) => GIMBAL_MANAGER_INFORMATION_DATA::NAME,
31971            Self::GIMBAL_MANAGER_SET_ATTITUDE(..) => GIMBAL_MANAGER_SET_ATTITUDE_DATA::NAME,
31972            Self::GIMBAL_MANAGER_SET_MANUAL_CONTROL(..) => {
31973                GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA::NAME
31974            }
31975            Self::GIMBAL_MANAGER_SET_PITCHYAW(..) => GIMBAL_MANAGER_SET_PITCHYAW_DATA::NAME,
31976            Self::GIMBAL_MANAGER_STATUS(..) => GIMBAL_MANAGER_STATUS_DATA::NAME,
31977            Self::GLOBAL_POSITION_INT(..) => GLOBAL_POSITION_INT_DATA::NAME,
31978            Self::GLOBAL_POSITION_INT_COV(..) => GLOBAL_POSITION_INT_COV_DATA::NAME,
31979            Self::GLOBAL_VISION_POSITION_ESTIMATE(..) => GLOBAL_VISION_POSITION_ESTIMATE_DATA::NAME,
31980            Self::GPS2_RAW(..) => GPS2_RAW_DATA::NAME,
31981            Self::GPS2_RTK(..) => GPS2_RTK_DATA::NAME,
31982            Self::GPS_GLOBAL_ORIGIN(..) => GPS_GLOBAL_ORIGIN_DATA::NAME,
31983            Self::GPS_INJECT_DATA(..) => GPS_INJECT_DATA_DATA::NAME,
31984            Self::GPS_INPUT(..) => GPS_INPUT_DATA::NAME,
31985            Self::GPS_RAW_INT(..) => GPS_RAW_INT_DATA::NAME,
31986            Self::GPS_RTCM_DATA(..) => GPS_RTCM_DATA_DATA::NAME,
31987            Self::GPS_RTK(..) => GPS_RTK_DATA::NAME,
31988            Self::GPS_STATUS(..) => GPS_STATUS_DATA::NAME,
31989            Self::HEARTBEAT(..) => HEARTBEAT_DATA::NAME,
31990            Self::HIGHRES_IMU(..) => HIGHRES_IMU_DATA::NAME,
31991            Self::HIGH_LATENCY(..) => HIGH_LATENCY_DATA::NAME,
31992            Self::HIGH_LATENCY2(..) => HIGH_LATENCY2_DATA::NAME,
31993            Self::HIL_ACTUATOR_CONTROLS(..) => HIL_ACTUATOR_CONTROLS_DATA::NAME,
31994            Self::HIL_CONTROLS(..) => HIL_CONTROLS_DATA::NAME,
31995            Self::HIL_GPS(..) => HIL_GPS_DATA::NAME,
31996            Self::HIL_OPTICAL_FLOW(..) => HIL_OPTICAL_FLOW_DATA::NAME,
31997            Self::HIL_RC_INPUTS_RAW(..) => HIL_RC_INPUTS_RAW_DATA::NAME,
31998            Self::HIL_SENSOR(..) => HIL_SENSOR_DATA::NAME,
31999            Self::HIL_STATE(..) => HIL_STATE_DATA::NAME,
32000            Self::HIL_STATE_QUATERNION(..) => HIL_STATE_QUATERNION_DATA::NAME,
32001            Self::HOME_POSITION(..) => HOME_POSITION_DATA::NAME,
32002            Self::HYGROMETER_SENSOR(..) => HYGROMETER_SENSOR_DATA::NAME,
32003            Self::ILLUMINATOR_STATUS(..) => ILLUMINATOR_STATUS_DATA::NAME,
32004            Self::ISBD_LINK_STATUS(..) => ISBD_LINK_STATUS_DATA::NAME,
32005            Self::LANDING_TARGET(..) => LANDING_TARGET_DATA::NAME,
32006            Self::LINK_NODE_STATUS(..) => LINK_NODE_STATUS_DATA::NAME,
32007            Self::LOCAL_POSITION_NED(..) => LOCAL_POSITION_NED_DATA::NAME,
32008            Self::LOCAL_POSITION_NED_COV(..) => LOCAL_POSITION_NED_COV_DATA::NAME,
32009            Self::LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET(..) => {
32010                LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA::NAME
32011            }
32012            Self::LOGGING_ACK(..) => LOGGING_ACK_DATA::NAME,
32013            Self::LOGGING_DATA(..) => LOGGING_DATA_DATA::NAME,
32014            Self::LOGGING_DATA_ACKED(..) => LOGGING_DATA_ACKED_DATA::NAME,
32015            Self::LOG_DATA(..) => LOG_DATA_DATA::NAME,
32016            Self::LOG_ENTRY(..) => LOG_ENTRY_DATA::NAME,
32017            Self::LOG_ERASE(..) => LOG_ERASE_DATA::NAME,
32018            Self::LOG_REQUEST_DATA(..) => LOG_REQUEST_DATA_DATA::NAME,
32019            Self::LOG_REQUEST_END(..) => LOG_REQUEST_END_DATA::NAME,
32020            Self::LOG_REQUEST_LIST(..) => LOG_REQUEST_LIST_DATA::NAME,
32021            Self::MAG_CAL_REPORT(..) => MAG_CAL_REPORT_DATA::NAME,
32022            Self::MANUAL_CONTROL(..) => MANUAL_CONTROL_DATA::NAME,
32023            Self::MANUAL_SETPOINT(..) => MANUAL_SETPOINT_DATA::NAME,
32024            Self::MEMORY_VECT(..) => MEMORY_VECT_DATA::NAME,
32025            Self::MESSAGE_INTERVAL(..) => MESSAGE_INTERVAL_DATA::NAME,
32026            Self::MISSION_ACK(..) => MISSION_ACK_DATA::NAME,
32027            Self::MISSION_CLEAR_ALL(..) => MISSION_CLEAR_ALL_DATA::NAME,
32028            Self::MISSION_COUNT(..) => MISSION_COUNT_DATA::NAME,
32029            Self::MISSION_CURRENT(..) => MISSION_CURRENT_DATA::NAME,
32030            Self::MISSION_ITEM(..) => MISSION_ITEM_DATA::NAME,
32031            Self::MISSION_ITEM_INT(..) => MISSION_ITEM_INT_DATA::NAME,
32032            Self::MISSION_ITEM_REACHED(..) => MISSION_ITEM_REACHED_DATA::NAME,
32033            Self::MISSION_REQUEST(..) => MISSION_REQUEST_DATA::NAME,
32034            Self::MISSION_REQUEST_INT(..) => MISSION_REQUEST_INT_DATA::NAME,
32035            Self::MISSION_REQUEST_LIST(..) => MISSION_REQUEST_LIST_DATA::NAME,
32036            Self::MISSION_REQUEST_PARTIAL_LIST(..) => MISSION_REQUEST_PARTIAL_LIST_DATA::NAME,
32037            Self::MISSION_SET_CURRENT(..) => MISSION_SET_CURRENT_DATA::NAME,
32038            Self::MISSION_WRITE_PARTIAL_LIST(..) => MISSION_WRITE_PARTIAL_LIST_DATA::NAME,
32039            Self::MOUNT_ORIENTATION(..) => MOUNT_ORIENTATION_DATA::NAME,
32040            Self::NAMED_VALUE_FLOAT(..) => NAMED_VALUE_FLOAT_DATA::NAME,
32041            Self::NAMED_VALUE_INT(..) => NAMED_VALUE_INT_DATA::NAME,
32042            Self::NAV_CONTROLLER_OUTPUT(..) => NAV_CONTROLLER_OUTPUT_DATA::NAME,
32043            Self::OBSTACLE_DISTANCE(..) => OBSTACLE_DISTANCE_DATA::NAME,
32044            Self::ODOMETRY(..) => ODOMETRY_DATA::NAME,
32045            Self::ONBOARD_COMPUTER_STATUS(..) => ONBOARD_COMPUTER_STATUS_DATA::NAME,
32046            Self::OPEN_DRONE_ID_ARM_STATUS(..) => OPEN_DRONE_ID_ARM_STATUS_DATA::NAME,
32047            Self::OPEN_DRONE_ID_AUTHENTICATION(..) => OPEN_DRONE_ID_AUTHENTICATION_DATA::NAME,
32048            Self::OPEN_DRONE_ID_BASIC_ID(..) => OPEN_DRONE_ID_BASIC_ID_DATA::NAME,
32049            Self::OPEN_DRONE_ID_LOCATION(..) => OPEN_DRONE_ID_LOCATION_DATA::NAME,
32050            Self::OPEN_DRONE_ID_MESSAGE_PACK(..) => OPEN_DRONE_ID_MESSAGE_PACK_DATA::NAME,
32051            Self::OPEN_DRONE_ID_OPERATOR_ID(..) => OPEN_DRONE_ID_OPERATOR_ID_DATA::NAME,
32052            Self::OPEN_DRONE_ID_SELF_ID(..) => OPEN_DRONE_ID_SELF_ID_DATA::NAME,
32053            Self::OPEN_DRONE_ID_SYSTEM(..) => OPEN_DRONE_ID_SYSTEM_DATA::NAME,
32054            Self::OPEN_DRONE_ID_SYSTEM_UPDATE(..) => OPEN_DRONE_ID_SYSTEM_UPDATE_DATA::NAME,
32055            Self::OPTICAL_FLOW(..) => OPTICAL_FLOW_DATA::NAME,
32056            Self::OPTICAL_FLOW_RAD(..) => OPTICAL_FLOW_RAD_DATA::NAME,
32057            Self::ORBIT_EXECUTION_STATUS(..) => ORBIT_EXECUTION_STATUS_DATA::NAME,
32058            Self::PARAM_EXT_ACK(..) => PARAM_EXT_ACK_DATA::NAME,
32059            Self::PARAM_EXT_REQUEST_LIST(..) => PARAM_EXT_REQUEST_LIST_DATA::NAME,
32060            Self::PARAM_EXT_REQUEST_READ(..) => PARAM_EXT_REQUEST_READ_DATA::NAME,
32061            Self::PARAM_EXT_SET(..) => PARAM_EXT_SET_DATA::NAME,
32062            Self::PARAM_EXT_VALUE(..) => PARAM_EXT_VALUE_DATA::NAME,
32063            Self::PARAM_MAP_RC(..) => PARAM_MAP_RC_DATA::NAME,
32064            Self::PARAM_REQUEST_LIST(..) => PARAM_REQUEST_LIST_DATA::NAME,
32065            Self::PARAM_REQUEST_READ(..) => PARAM_REQUEST_READ_DATA::NAME,
32066            Self::PARAM_SET(..) => PARAM_SET_DATA::NAME,
32067            Self::PARAM_VALUE(..) => PARAM_VALUE_DATA::NAME,
32068            Self::PING(..) => PING_DATA::NAME,
32069            Self::PLAY_TUNE(..) => PLAY_TUNE_DATA::NAME,
32070            Self::PLAY_TUNE_V2(..) => PLAY_TUNE_V2_DATA::NAME,
32071            Self::POSITION_TARGET_GLOBAL_INT(..) => POSITION_TARGET_GLOBAL_INT_DATA::NAME,
32072            Self::POSITION_TARGET_LOCAL_NED(..) => POSITION_TARGET_LOCAL_NED_DATA::NAME,
32073            Self::POWER_STATUS(..) => POWER_STATUS_DATA::NAME,
32074            Self::PROTOCOL_VERSION(..) => PROTOCOL_VERSION_DATA::NAME,
32075            Self::RADIO_STATUS(..) => RADIO_STATUS_DATA::NAME,
32076            Self::RAW_IMU(..) => RAW_IMU_DATA::NAME,
32077            Self::RAW_PRESSURE(..) => RAW_PRESSURE_DATA::NAME,
32078            Self::RAW_RPM(..) => RAW_RPM_DATA::NAME,
32079            Self::RC_CHANNELS(..) => RC_CHANNELS_DATA::NAME,
32080            Self::RC_CHANNELS_OVERRIDE(..) => RC_CHANNELS_OVERRIDE_DATA::NAME,
32081            Self::RC_CHANNELS_RAW(..) => RC_CHANNELS_RAW_DATA::NAME,
32082            Self::RC_CHANNELS_SCALED(..) => RC_CHANNELS_SCALED_DATA::NAME,
32083            Self::REQUEST_DATA_STREAM(..) => REQUEST_DATA_STREAM_DATA::NAME,
32084            Self::REQUEST_EVENT(..) => REQUEST_EVENT_DATA::NAME,
32085            Self::RESOURCE_REQUEST(..) => RESOURCE_REQUEST_DATA::NAME,
32086            Self::RESPONSE_EVENT_ERROR(..) => RESPONSE_EVENT_ERROR_DATA::NAME,
32087            Self::SAFETY_ALLOWED_AREA(..) => SAFETY_ALLOWED_AREA_DATA::NAME,
32088            Self::SAFETY_SET_ALLOWED_AREA(..) => SAFETY_SET_ALLOWED_AREA_DATA::NAME,
32089            Self::SCALED_IMU(..) => SCALED_IMU_DATA::NAME,
32090            Self::SCALED_IMU2(..) => SCALED_IMU2_DATA::NAME,
32091            Self::SCALED_IMU3(..) => SCALED_IMU3_DATA::NAME,
32092            Self::SCALED_PRESSURE(..) => SCALED_PRESSURE_DATA::NAME,
32093            Self::SCALED_PRESSURE2(..) => SCALED_PRESSURE2_DATA::NAME,
32094            Self::SCALED_PRESSURE3(..) => SCALED_PRESSURE3_DATA::NAME,
32095            Self::SERIAL_CONTROL(..) => SERIAL_CONTROL_DATA::NAME,
32096            Self::SERVO_OUTPUT_RAW(..) => SERVO_OUTPUT_RAW_DATA::NAME,
32097            Self::SETUP_SIGNING(..) => SETUP_SIGNING_DATA::NAME,
32098            Self::SET_ACTUATOR_CONTROL_TARGET(..) => SET_ACTUATOR_CONTROL_TARGET_DATA::NAME,
32099            Self::SET_ATTITUDE_TARGET(..) => SET_ATTITUDE_TARGET_DATA::NAME,
32100            Self::SET_GPS_GLOBAL_ORIGIN(..) => SET_GPS_GLOBAL_ORIGIN_DATA::NAME,
32101            Self::SET_HOME_POSITION(..) => SET_HOME_POSITION_DATA::NAME,
32102            Self::SET_MODE(..) => SET_MODE_DATA::NAME,
32103            Self::SET_POSITION_TARGET_GLOBAL_INT(..) => SET_POSITION_TARGET_GLOBAL_INT_DATA::NAME,
32104            Self::SET_POSITION_TARGET_LOCAL_NED(..) => SET_POSITION_TARGET_LOCAL_NED_DATA::NAME,
32105            Self::SIM_STATE(..) => SIM_STATE_DATA::NAME,
32106            Self::SMART_BATTERY_INFO(..) => SMART_BATTERY_INFO_DATA::NAME,
32107            Self::STATUSTEXT(..) => STATUSTEXT_DATA::NAME,
32108            Self::STORAGE_INFORMATION(..) => STORAGE_INFORMATION_DATA::NAME,
32109            Self::SUPPORTED_TUNES(..) => SUPPORTED_TUNES_DATA::NAME,
32110            Self::SYSTEM_TIME(..) => SYSTEM_TIME_DATA::NAME,
32111            Self::SYS_STATUS(..) => SYS_STATUS_DATA::NAME,
32112            Self::TERRAIN_CHECK(..) => TERRAIN_CHECK_DATA::NAME,
32113            Self::TERRAIN_DATA(..) => TERRAIN_DATA_DATA::NAME,
32114            Self::TERRAIN_REPORT(..) => TERRAIN_REPORT_DATA::NAME,
32115            Self::TERRAIN_REQUEST(..) => TERRAIN_REQUEST_DATA::NAME,
32116            Self::TIMESYNC(..) => TIMESYNC_DATA::NAME,
32117            Self::TIME_ESTIMATE_TO_TARGET(..) => TIME_ESTIMATE_TO_TARGET_DATA::NAME,
32118            Self::TRAJECTORY_REPRESENTATION_BEZIER(..) => {
32119                TRAJECTORY_REPRESENTATION_BEZIER_DATA::NAME
32120            }
32121            Self::TRAJECTORY_REPRESENTATION_WAYPOINTS(..) => {
32122                TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA::NAME
32123            }
32124            Self::TUNNEL(..) => TUNNEL_DATA::NAME,
32125            Self::UAVCAN_NODE_INFO(..) => UAVCAN_NODE_INFO_DATA::NAME,
32126            Self::UAVCAN_NODE_STATUS(..) => UAVCAN_NODE_STATUS_DATA::NAME,
32127            Self::UTM_GLOBAL_POSITION(..) => UTM_GLOBAL_POSITION_DATA::NAME,
32128            Self::V2_EXTENSION(..) => V2_EXTENSION_DATA::NAME,
32129            Self::VFR_HUD(..) => VFR_HUD_DATA::NAME,
32130            Self::VIBRATION(..) => VIBRATION_DATA::NAME,
32131            Self::VICON_POSITION_ESTIMATE(..) => VICON_POSITION_ESTIMATE_DATA::NAME,
32132            Self::VIDEO_STREAM_INFORMATION(..) => VIDEO_STREAM_INFORMATION_DATA::NAME,
32133            Self::VIDEO_STREAM_STATUS(..) => VIDEO_STREAM_STATUS_DATA::NAME,
32134            Self::VISION_POSITION_ESTIMATE(..) => VISION_POSITION_ESTIMATE_DATA::NAME,
32135            Self::VISION_SPEED_ESTIMATE(..) => VISION_SPEED_ESTIMATE_DATA::NAME,
32136            Self::WHEEL_DISTANCE(..) => WHEEL_DISTANCE_DATA::NAME,
32137            Self::WIFI_CONFIG_AP(..) => WIFI_CONFIG_AP_DATA::NAME,
32138            Self::WINCH_STATUS(..) => WINCH_STATUS_DATA::NAME,
32139            Self::WIND_COV(..) => WIND_COV_DATA::NAME,
32140        }
32141    }
32142    fn message_id(&self) -> u32 {
32143        match self {
32144            Self::ACTUATOR_CONTROL_TARGET(..) => ACTUATOR_CONTROL_TARGET_DATA::ID,
32145            Self::ACTUATOR_OUTPUT_STATUS(..) => ACTUATOR_OUTPUT_STATUS_DATA::ID,
32146            Self::ADSB_VEHICLE(..) => ADSB_VEHICLE_DATA::ID,
32147            Self::AIS_VESSEL(..) => AIS_VESSEL_DATA::ID,
32148            Self::ALTITUDE(..) => ALTITUDE_DATA::ID,
32149            Self::ATTITUDE(..) => ATTITUDE_DATA::ID,
32150            Self::ATTITUDE_QUATERNION(..) => ATTITUDE_QUATERNION_DATA::ID,
32151            Self::ATTITUDE_QUATERNION_COV(..) => ATTITUDE_QUATERNION_COV_DATA::ID,
32152            Self::ATTITUDE_TARGET(..) => ATTITUDE_TARGET_DATA::ID,
32153            Self::ATT_POS_MOCAP(..) => ATT_POS_MOCAP_DATA::ID,
32154            Self::AUTH_KEY(..) => AUTH_KEY_DATA::ID,
32155            Self::AUTOPILOT_STATE_FOR_GIMBAL_DEVICE(..) => {
32156                AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA::ID
32157            }
32158            Self::AUTOPILOT_VERSION(..) => AUTOPILOT_VERSION_DATA::ID,
32159            Self::AVAILABLE_MODES(..) => AVAILABLE_MODES_DATA::ID,
32160            Self::AVAILABLE_MODES_MONITOR(..) => AVAILABLE_MODES_MONITOR_DATA::ID,
32161            Self::BATTERY_INFO(..) => BATTERY_INFO_DATA::ID,
32162            Self::BATTERY_STATUS(..) => BATTERY_STATUS_DATA::ID,
32163            Self::BUTTON_CHANGE(..) => BUTTON_CHANGE_DATA::ID,
32164            Self::CAMERA_CAPTURE_STATUS(..) => CAMERA_CAPTURE_STATUS_DATA::ID,
32165            Self::CAMERA_FOV_STATUS(..) => CAMERA_FOV_STATUS_DATA::ID,
32166            Self::CAMERA_IMAGE_CAPTURED(..) => CAMERA_IMAGE_CAPTURED_DATA::ID,
32167            Self::CAMERA_INFORMATION(..) => CAMERA_INFORMATION_DATA::ID,
32168            Self::CAMERA_SETTINGS(..) => CAMERA_SETTINGS_DATA::ID,
32169            Self::CAMERA_THERMAL_RANGE(..) => CAMERA_THERMAL_RANGE_DATA::ID,
32170            Self::CAMERA_TRACKING_GEO_STATUS(..) => CAMERA_TRACKING_GEO_STATUS_DATA::ID,
32171            Self::CAMERA_TRACKING_IMAGE_STATUS(..) => CAMERA_TRACKING_IMAGE_STATUS_DATA::ID,
32172            Self::CAMERA_TRIGGER(..) => CAMERA_TRIGGER_DATA::ID,
32173            Self::CANFD_FRAME(..) => CANFD_FRAME_DATA::ID,
32174            Self::CAN_FILTER_MODIFY(..) => CAN_FILTER_MODIFY_DATA::ID,
32175            Self::CAN_FRAME(..) => CAN_FRAME_DATA::ID,
32176            Self::CELLULAR_CONFIG(..) => CELLULAR_CONFIG_DATA::ID,
32177            Self::CELLULAR_STATUS(..) => CELLULAR_STATUS_DATA::ID,
32178            Self::CHANGE_OPERATOR_CONTROL(..) => CHANGE_OPERATOR_CONTROL_DATA::ID,
32179            Self::CHANGE_OPERATOR_CONTROL_ACK(..) => CHANGE_OPERATOR_CONTROL_ACK_DATA::ID,
32180            Self::COLLISION(..) => COLLISION_DATA::ID,
32181            Self::COMMAND_ACK(..) => COMMAND_ACK_DATA::ID,
32182            Self::COMMAND_CANCEL(..) => COMMAND_CANCEL_DATA::ID,
32183            Self::COMMAND_INT(..) => COMMAND_INT_DATA::ID,
32184            Self::COMMAND_LONG(..) => COMMAND_LONG_DATA::ID,
32185            Self::COMPONENT_INFORMATION(..) => COMPONENT_INFORMATION_DATA::ID,
32186            Self::COMPONENT_INFORMATION_BASIC(..) => COMPONENT_INFORMATION_BASIC_DATA::ID,
32187            Self::COMPONENT_METADATA(..) => COMPONENT_METADATA_DATA::ID,
32188            Self::CONTROL_SYSTEM_STATE(..) => CONTROL_SYSTEM_STATE_DATA::ID,
32189            Self::CURRENT_EVENT_SEQUENCE(..) => CURRENT_EVENT_SEQUENCE_DATA::ID,
32190            Self::CURRENT_MODE(..) => CURRENT_MODE_DATA::ID,
32191            Self::DATA_STREAM(..) => DATA_STREAM_DATA::ID,
32192            Self::DATA_TRANSMISSION_HANDSHAKE(..) => DATA_TRANSMISSION_HANDSHAKE_DATA::ID,
32193            Self::DEBUG(..) => DEBUG_DATA::ID,
32194            Self::DEBUG_FLOAT_ARRAY(..) => DEBUG_FLOAT_ARRAY_DATA::ID,
32195            Self::DEBUG_VECT(..) => DEBUG_VECT_DATA::ID,
32196            Self::DISTANCE_SENSOR(..) => DISTANCE_SENSOR_DATA::ID,
32197            Self::EFI_STATUS(..) => EFI_STATUS_DATA::ID,
32198            Self::ENCAPSULATED_DATA(..) => ENCAPSULATED_DATA_DATA::ID,
32199            Self::ESC_INFO(..) => ESC_INFO_DATA::ID,
32200            Self::ESC_STATUS(..) => ESC_STATUS_DATA::ID,
32201            Self::ESTIMATOR_STATUS(..) => ESTIMATOR_STATUS_DATA::ID,
32202            Self::EVENT(..) => EVENT_DATA::ID,
32203            Self::EXTENDED_SYS_STATE(..) => EXTENDED_SYS_STATE_DATA::ID,
32204            Self::FENCE_STATUS(..) => FENCE_STATUS_DATA::ID,
32205            Self::FILE_TRANSFER_PROTOCOL(..) => FILE_TRANSFER_PROTOCOL_DATA::ID,
32206            Self::FLIGHT_INFORMATION(..) => FLIGHT_INFORMATION_DATA::ID,
32207            Self::FOLLOW_TARGET(..) => FOLLOW_TARGET_DATA::ID,
32208            Self::FUEL_STATUS(..) => FUEL_STATUS_DATA::ID,
32209            Self::GENERATOR_STATUS(..) => GENERATOR_STATUS_DATA::ID,
32210            Self::GIMBAL_DEVICE_ATTITUDE_STATUS(..) => GIMBAL_DEVICE_ATTITUDE_STATUS_DATA::ID,
32211            Self::GIMBAL_DEVICE_INFORMATION(..) => GIMBAL_DEVICE_INFORMATION_DATA::ID,
32212            Self::GIMBAL_DEVICE_SET_ATTITUDE(..) => GIMBAL_DEVICE_SET_ATTITUDE_DATA::ID,
32213            Self::GIMBAL_MANAGER_INFORMATION(..) => GIMBAL_MANAGER_INFORMATION_DATA::ID,
32214            Self::GIMBAL_MANAGER_SET_ATTITUDE(..) => GIMBAL_MANAGER_SET_ATTITUDE_DATA::ID,
32215            Self::GIMBAL_MANAGER_SET_MANUAL_CONTROL(..) => {
32216                GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA::ID
32217            }
32218            Self::GIMBAL_MANAGER_SET_PITCHYAW(..) => GIMBAL_MANAGER_SET_PITCHYAW_DATA::ID,
32219            Self::GIMBAL_MANAGER_STATUS(..) => GIMBAL_MANAGER_STATUS_DATA::ID,
32220            Self::GLOBAL_POSITION_INT(..) => GLOBAL_POSITION_INT_DATA::ID,
32221            Self::GLOBAL_POSITION_INT_COV(..) => GLOBAL_POSITION_INT_COV_DATA::ID,
32222            Self::GLOBAL_VISION_POSITION_ESTIMATE(..) => GLOBAL_VISION_POSITION_ESTIMATE_DATA::ID,
32223            Self::GPS2_RAW(..) => GPS2_RAW_DATA::ID,
32224            Self::GPS2_RTK(..) => GPS2_RTK_DATA::ID,
32225            Self::GPS_GLOBAL_ORIGIN(..) => GPS_GLOBAL_ORIGIN_DATA::ID,
32226            Self::GPS_INJECT_DATA(..) => GPS_INJECT_DATA_DATA::ID,
32227            Self::GPS_INPUT(..) => GPS_INPUT_DATA::ID,
32228            Self::GPS_RAW_INT(..) => GPS_RAW_INT_DATA::ID,
32229            Self::GPS_RTCM_DATA(..) => GPS_RTCM_DATA_DATA::ID,
32230            Self::GPS_RTK(..) => GPS_RTK_DATA::ID,
32231            Self::GPS_STATUS(..) => GPS_STATUS_DATA::ID,
32232            Self::HEARTBEAT(..) => HEARTBEAT_DATA::ID,
32233            Self::HIGHRES_IMU(..) => HIGHRES_IMU_DATA::ID,
32234            Self::HIGH_LATENCY(..) => HIGH_LATENCY_DATA::ID,
32235            Self::HIGH_LATENCY2(..) => HIGH_LATENCY2_DATA::ID,
32236            Self::HIL_ACTUATOR_CONTROLS(..) => HIL_ACTUATOR_CONTROLS_DATA::ID,
32237            Self::HIL_CONTROLS(..) => HIL_CONTROLS_DATA::ID,
32238            Self::HIL_GPS(..) => HIL_GPS_DATA::ID,
32239            Self::HIL_OPTICAL_FLOW(..) => HIL_OPTICAL_FLOW_DATA::ID,
32240            Self::HIL_RC_INPUTS_RAW(..) => HIL_RC_INPUTS_RAW_DATA::ID,
32241            Self::HIL_SENSOR(..) => HIL_SENSOR_DATA::ID,
32242            Self::HIL_STATE(..) => HIL_STATE_DATA::ID,
32243            Self::HIL_STATE_QUATERNION(..) => HIL_STATE_QUATERNION_DATA::ID,
32244            Self::HOME_POSITION(..) => HOME_POSITION_DATA::ID,
32245            Self::HYGROMETER_SENSOR(..) => HYGROMETER_SENSOR_DATA::ID,
32246            Self::ILLUMINATOR_STATUS(..) => ILLUMINATOR_STATUS_DATA::ID,
32247            Self::ISBD_LINK_STATUS(..) => ISBD_LINK_STATUS_DATA::ID,
32248            Self::LANDING_TARGET(..) => LANDING_TARGET_DATA::ID,
32249            Self::LINK_NODE_STATUS(..) => LINK_NODE_STATUS_DATA::ID,
32250            Self::LOCAL_POSITION_NED(..) => LOCAL_POSITION_NED_DATA::ID,
32251            Self::LOCAL_POSITION_NED_COV(..) => LOCAL_POSITION_NED_COV_DATA::ID,
32252            Self::LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET(..) => {
32253                LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA::ID
32254            }
32255            Self::LOGGING_ACK(..) => LOGGING_ACK_DATA::ID,
32256            Self::LOGGING_DATA(..) => LOGGING_DATA_DATA::ID,
32257            Self::LOGGING_DATA_ACKED(..) => LOGGING_DATA_ACKED_DATA::ID,
32258            Self::LOG_DATA(..) => LOG_DATA_DATA::ID,
32259            Self::LOG_ENTRY(..) => LOG_ENTRY_DATA::ID,
32260            Self::LOG_ERASE(..) => LOG_ERASE_DATA::ID,
32261            Self::LOG_REQUEST_DATA(..) => LOG_REQUEST_DATA_DATA::ID,
32262            Self::LOG_REQUEST_END(..) => LOG_REQUEST_END_DATA::ID,
32263            Self::LOG_REQUEST_LIST(..) => LOG_REQUEST_LIST_DATA::ID,
32264            Self::MAG_CAL_REPORT(..) => MAG_CAL_REPORT_DATA::ID,
32265            Self::MANUAL_CONTROL(..) => MANUAL_CONTROL_DATA::ID,
32266            Self::MANUAL_SETPOINT(..) => MANUAL_SETPOINT_DATA::ID,
32267            Self::MEMORY_VECT(..) => MEMORY_VECT_DATA::ID,
32268            Self::MESSAGE_INTERVAL(..) => MESSAGE_INTERVAL_DATA::ID,
32269            Self::MISSION_ACK(..) => MISSION_ACK_DATA::ID,
32270            Self::MISSION_CLEAR_ALL(..) => MISSION_CLEAR_ALL_DATA::ID,
32271            Self::MISSION_COUNT(..) => MISSION_COUNT_DATA::ID,
32272            Self::MISSION_CURRENT(..) => MISSION_CURRENT_DATA::ID,
32273            Self::MISSION_ITEM(..) => MISSION_ITEM_DATA::ID,
32274            Self::MISSION_ITEM_INT(..) => MISSION_ITEM_INT_DATA::ID,
32275            Self::MISSION_ITEM_REACHED(..) => MISSION_ITEM_REACHED_DATA::ID,
32276            Self::MISSION_REQUEST(..) => MISSION_REQUEST_DATA::ID,
32277            Self::MISSION_REQUEST_INT(..) => MISSION_REQUEST_INT_DATA::ID,
32278            Self::MISSION_REQUEST_LIST(..) => MISSION_REQUEST_LIST_DATA::ID,
32279            Self::MISSION_REQUEST_PARTIAL_LIST(..) => MISSION_REQUEST_PARTIAL_LIST_DATA::ID,
32280            Self::MISSION_SET_CURRENT(..) => MISSION_SET_CURRENT_DATA::ID,
32281            Self::MISSION_WRITE_PARTIAL_LIST(..) => MISSION_WRITE_PARTIAL_LIST_DATA::ID,
32282            Self::MOUNT_ORIENTATION(..) => MOUNT_ORIENTATION_DATA::ID,
32283            Self::NAMED_VALUE_FLOAT(..) => NAMED_VALUE_FLOAT_DATA::ID,
32284            Self::NAMED_VALUE_INT(..) => NAMED_VALUE_INT_DATA::ID,
32285            Self::NAV_CONTROLLER_OUTPUT(..) => NAV_CONTROLLER_OUTPUT_DATA::ID,
32286            Self::OBSTACLE_DISTANCE(..) => OBSTACLE_DISTANCE_DATA::ID,
32287            Self::ODOMETRY(..) => ODOMETRY_DATA::ID,
32288            Self::ONBOARD_COMPUTER_STATUS(..) => ONBOARD_COMPUTER_STATUS_DATA::ID,
32289            Self::OPEN_DRONE_ID_ARM_STATUS(..) => OPEN_DRONE_ID_ARM_STATUS_DATA::ID,
32290            Self::OPEN_DRONE_ID_AUTHENTICATION(..) => OPEN_DRONE_ID_AUTHENTICATION_DATA::ID,
32291            Self::OPEN_DRONE_ID_BASIC_ID(..) => OPEN_DRONE_ID_BASIC_ID_DATA::ID,
32292            Self::OPEN_DRONE_ID_LOCATION(..) => OPEN_DRONE_ID_LOCATION_DATA::ID,
32293            Self::OPEN_DRONE_ID_MESSAGE_PACK(..) => OPEN_DRONE_ID_MESSAGE_PACK_DATA::ID,
32294            Self::OPEN_DRONE_ID_OPERATOR_ID(..) => OPEN_DRONE_ID_OPERATOR_ID_DATA::ID,
32295            Self::OPEN_DRONE_ID_SELF_ID(..) => OPEN_DRONE_ID_SELF_ID_DATA::ID,
32296            Self::OPEN_DRONE_ID_SYSTEM(..) => OPEN_DRONE_ID_SYSTEM_DATA::ID,
32297            Self::OPEN_DRONE_ID_SYSTEM_UPDATE(..) => OPEN_DRONE_ID_SYSTEM_UPDATE_DATA::ID,
32298            Self::OPTICAL_FLOW(..) => OPTICAL_FLOW_DATA::ID,
32299            Self::OPTICAL_FLOW_RAD(..) => OPTICAL_FLOW_RAD_DATA::ID,
32300            Self::ORBIT_EXECUTION_STATUS(..) => ORBIT_EXECUTION_STATUS_DATA::ID,
32301            Self::PARAM_EXT_ACK(..) => PARAM_EXT_ACK_DATA::ID,
32302            Self::PARAM_EXT_REQUEST_LIST(..) => PARAM_EXT_REQUEST_LIST_DATA::ID,
32303            Self::PARAM_EXT_REQUEST_READ(..) => PARAM_EXT_REQUEST_READ_DATA::ID,
32304            Self::PARAM_EXT_SET(..) => PARAM_EXT_SET_DATA::ID,
32305            Self::PARAM_EXT_VALUE(..) => PARAM_EXT_VALUE_DATA::ID,
32306            Self::PARAM_MAP_RC(..) => PARAM_MAP_RC_DATA::ID,
32307            Self::PARAM_REQUEST_LIST(..) => PARAM_REQUEST_LIST_DATA::ID,
32308            Self::PARAM_REQUEST_READ(..) => PARAM_REQUEST_READ_DATA::ID,
32309            Self::PARAM_SET(..) => PARAM_SET_DATA::ID,
32310            Self::PARAM_VALUE(..) => PARAM_VALUE_DATA::ID,
32311            Self::PING(..) => PING_DATA::ID,
32312            Self::PLAY_TUNE(..) => PLAY_TUNE_DATA::ID,
32313            Self::PLAY_TUNE_V2(..) => PLAY_TUNE_V2_DATA::ID,
32314            Self::POSITION_TARGET_GLOBAL_INT(..) => POSITION_TARGET_GLOBAL_INT_DATA::ID,
32315            Self::POSITION_TARGET_LOCAL_NED(..) => POSITION_TARGET_LOCAL_NED_DATA::ID,
32316            Self::POWER_STATUS(..) => POWER_STATUS_DATA::ID,
32317            Self::PROTOCOL_VERSION(..) => PROTOCOL_VERSION_DATA::ID,
32318            Self::RADIO_STATUS(..) => RADIO_STATUS_DATA::ID,
32319            Self::RAW_IMU(..) => RAW_IMU_DATA::ID,
32320            Self::RAW_PRESSURE(..) => RAW_PRESSURE_DATA::ID,
32321            Self::RAW_RPM(..) => RAW_RPM_DATA::ID,
32322            Self::RC_CHANNELS(..) => RC_CHANNELS_DATA::ID,
32323            Self::RC_CHANNELS_OVERRIDE(..) => RC_CHANNELS_OVERRIDE_DATA::ID,
32324            Self::RC_CHANNELS_RAW(..) => RC_CHANNELS_RAW_DATA::ID,
32325            Self::RC_CHANNELS_SCALED(..) => RC_CHANNELS_SCALED_DATA::ID,
32326            Self::REQUEST_DATA_STREAM(..) => REQUEST_DATA_STREAM_DATA::ID,
32327            Self::REQUEST_EVENT(..) => REQUEST_EVENT_DATA::ID,
32328            Self::RESOURCE_REQUEST(..) => RESOURCE_REQUEST_DATA::ID,
32329            Self::RESPONSE_EVENT_ERROR(..) => RESPONSE_EVENT_ERROR_DATA::ID,
32330            Self::SAFETY_ALLOWED_AREA(..) => SAFETY_ALLOWED_AREA_DATA::ID,
32331            Self::SAFETY_SET_ALLOWED_AREA(..) => SAFETY_SET_ALLOWED_AREA_DATA::ID,
32332            Self::SCALED_IMU(..) => SCALED_IMU_DATA::ID,
32333            Self::SCALED_IMU2(..) => SCALED_IMU2_DATA::ID,
32334            Self::SCALED_IMU3(..) => SCALED_IMU3_DATA::ID,
32335            Self::SCALED_PRESSURE(..) => SCALED_PRESSURE_DATA::ID,
32336            Self::SCALED_PRESSURE2(..) => SCALED_PRESSURE2_DATA::ID,
32337            Self::SCALED_PRESSURE3(..) => SCALED_PRESSURE3_DATA::ID,
32338            Self::SERIAL_CONTROL(..) => SERIAL_CONTROL_DATA::ID,
32339            Self::SERVO_OUTPUT_RAW(..) => SERVO_OUTPUT_RAW_DATA::ID,
32340            Self::SETUP_SIGNING(..) => SETUP_SIGNING_DATA::ID,
32341            Self::SET_ACTUATOR_CONTROL_TARGET(..) => SET_ACTUATOR_CONTROL_TARGET_DATA::ID,
32342            Self::SET_ATTITUDE_TARGET(..) => SET_ATTITUDE_TARGET_DATA::ID,
32343            Self::SET_GPS_GLOBAL_ORIGIN(..) => SET_GPS_GLOBAL_ORIGIN_DATA::ID,
32344            Self::SET_HOME_POSITION(..) => SET_HOME_POSITION_DATA::ID,
32345            Self::SET_MODE(..) => SET_MODE_DATA::ID,
32346            Self::SET_POSITION_TARGET_GLOBAL_INT(..) => SET_POSITION_TARGET_GLOBAL_INT_DATA::ID,
32347            Self::SET_POSITION_TARGET_LOCAL_NED(..) => SET_POSITION_TARGET_LOCAL_NED_DATA::ID,
32348            Self::SIM_STATE(..) => SIM_STATE_DATA::ID,
32349            Self::SMART_BATTERY_INFO(..) => SMART_BATTERY_INFO_DATA::ID,
32350            Self::STATUSTEXT(..) => STATUSTEXT_DATA::ID,
32351            Self::STORAGE_INFORMATION(..) => STORAGE_INFORMATION_DATA::ID,
32352            Self::SUPPORTED_TUNES(..) => SUPPORTED_TUNES_DATA::ID,
32353            Self::SYSTEM_TIME(..) => SYSTEM_TIME_DATA::ID,
32354            Self::SYS_STATUS(..) => SYS_STATUS_DATA::ID,
32355            Self::TERRAIN_CHECK(..) => TERRAIN_CHECK_DATA::ID,
32356            Self::TERRAIN_DATA(..) => TERRAIN_DATA_DATA::ID,
32357            Self::TERRAIN_REPORT(..) => TERRAIN_REPORT_DATA::ID,
32358            Self::TERRAIN_REQUEST(..) => TERRAIN_REQUEST_DATA::ID,
32359            Self::TIMESYNC(..) => TIMESYNC_DATA::ID,
32360            Self::TIME_ESTIMATE_TO_TARGET(..) => TIME_ESTIMATE_TO_TARGET_DATA::ID,
32361            Self::TRAJECTORY_REPRESENTATION_BEZIER(..) => TRAJECTORY_REPRESENTATION_BEZIER_DATA::ID,
32362            Self::TRAJECTORY_REPRESENTATION_WAYPOINTS(..) => {
32363                TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA::ID
32364            }
32365            Self::TUNNEL(..) => TUNNEL_DATA::ID,
32366            Self::UAVCAN_NODE_INFO(..) => UAVCAN_NODE_INFO_DATA::ID,
32367            Self::UAVCAN_NODE_STATUS(..) => UAVCAN_NODE_STATUS_DATA::ID,
32368            Self::UTM_GLOBAL_POSITION(..) => UTM_GLOBAL_POSITION_DATA::ID,
32369            Self::V2_EXTENSION(..) => V2_EXTENSION_DATA::ID,
32370            Self::VFR_HUD(..) => VFR_HUD_DATA::ID,
32371            Self::VIBRATION(..) => VIBRATION_DATA::ID,
32372            Self::VICON_POSITION_ESTIMATE(..) => VICON_POSITION_ESTIMATE_DATA::ID,
32373            Self::VIDEO_STREAM_INFORMATION(..) => VIDEO_STREAM_INFORMATION_DATA::ID,
32374            Self::VIDEO_STREAM_STATUS(..) => VIDEO_STREAM_STATUS_DATA::ID,
32375            Self::VISION_POSITION_ESTIMATE(..) => VISION_POSITION_ESTIMATE_DATA::ID,
32376            Self::VISION_SPEED_ESTIMATE(..) => VISION_SPEED_ESTIMATE_DATA::ID,
32377            Self::WHEEL_DISTANCE(..) => WHEEL_DISTANCE_DATA::ID,
32378            Self::WIFI_CONFIG_AP(..) => WIFI_CONFIG_AP_DATA::ID,
32379            Self::WINCH_STATUS(..) => WINCH_STATUS_DATA::ID,
32380            Self::WIND_COV(..) => WIND_COV_DATA::ID,
32381        }
32382    }
32383    fn message_id_from_name(name: &str) -> Option<u32> {
32384        match name {
32385            ACTUATOR_CONTROL_TARGET_DATA::NAME => Some(ACTUATOR_CONTROL_TARGET_DATA::ID),
32386            ACTUATOR_OUTPUT_STATUS_DATA::NAME => Some(ACTUATOR_OUTPUT_STATUS_DATA::ID),
32387            ADSB_VEHICLE_DATA::NAME => Some(ADSB_VEHICLE_DATA::ID),
32388            AIS_VESSEL_DATA::NAME => Some(AIS_VESSEL_DATA::ID),
32389            ALTITUDE_DATA::NAME => Some(ALTITUDE_DATA::ID),
32390            ATTITUDE_DATA::NAME => Some(ATTITUDE_DATA::ID),
32391            ATTITUDE_QUATERNION_DATA::NAME => Some(ATTITUDE_QUATERNION_DATA::ID),
32392            ATTITUDE_QUATERNION_COV_DATA::NAME => Some(ATTITUDE_QUATERNION_COV_DATA::ID),
32393            ATTITUDE_TARGET_DATA::NAME => Some(ATTITUDE_TARGET_DATA::ID),
32394            ATT_POS_MOCAP_DATA::NAME => Some(ATT_POS_MOCAP_DATA::ID),
32395            AUTH_KEY_DATA::NAME => Some(AUTH_KEY_DATA::ID),
32396            AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA::NAME => {
32397                Some(AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA::ID)
32398            }
32399            AUTOPILOT_VERSION_DATA::NAME => Some(AUTOPILOT_VERSION_DATA::ID),
32400            AVAILABLE_MODES_DATA::NAME => Some(AVAILABLE_MODES_DATA::ID),
32401            AVAILABLE_MODES_MONITOR_DATA::NAME => Some(AVAILABLE_MODES_MONITOR_DATA::ID),
32402            BATTERY_INFO_DATA::NAME => Some(BATTERY_INFO_DATA::ID),
32403            BATTERY_STATUS_DATA::NAME => Some(BATTERY_STATUS_DATA::ID),
32404            BUTTON_CHANGE_DATA::NAME => Some(BUTTON_CHANGE_DATA::ID),
32405            CAMERA_CAPTURE_STATUS_DATA::NAME => Some(CAMERA_CAPTURE_STATUS_DATA::ID),
32406            CAMERA_FOV_STATUS_DATA::NAME => Some(CAMERA_FOV_STATUS_DATA::ID),
32407            CAMERA_IMAGE_CAPTURED_DATA::NAME => Some(CAMERA_IMAGE_CAPTURED_DATA::ID),
32408            CAMERA_INFORMATION_DATA::NAME => Some(CAMERA_INFORMATION_DATA::ID),
32409            CAMERA_SETTINGS_DATA::NAME => Some(CAMERA_SETTINGS_DATA::ID),
32410            CAMERA_THERMAL_RANGE_DATA::NAME => Some(CAMERA_THERMAL_RANGE_DATA::ID),
32411            CAMERA_TRACKING_GEO_STATUS_DATA::NAME => Some(CAMERA_TRACKING_GEO_STATUS_DATA::ID),
32412            CAMERA_TRACKING_IMAGE_STATUS_DATA::NAME => Some(CAMERA_TRACKING_IMAGE_STATUS_DATA::ID),
32413            CAMERA_TRIGGER_DATA::NAME => Some(CAMERA_TRIGGER_DATA::ID),
32414            CANFD_FRAME_DATA::NAME => Some(CANFD_FRAME_DATA::ID),
32415            CAN_FILTER_MODIFY_DATA::NAME => Some(CAN_FILTER_MODIFY_DATA::ID),
32416            CAN_FRAME_DATA::NAME => Some(CAN_FRAME_DATA::ID),
32417            CELLULAR_CONFIG_DATA::NAME => Some(CELLULAR_CONFIG_DATA::ID),
32418            CELLULAR_STATUS_DATA::NAME => Some(CELLULAR_STATUS_DATA::ID),
32419            CHANGE_OPERATOR_CONTROL_DATA::NAME => Some(CHANGE_OPERATOR_CONTROL_DATA::ID),
32420            CHANGE_OPERATOR_CONTROL_ACK_DATA::NAME => Some(CHANGE_OPERATOR_CONTROL_ACK_DATA::ID),
32421            COLLISION_DATA::NAME => Some(COLLISION_DATA::ID),
32422            COMMAND_ACK_DATA::NAME => Some(COMMAND_ACK_DATA::ID),
32423            COMMAND_CANCEL_DATA::NAME => Some(COMMAND_CANCEL_DATA::ID),
32424            COMMAND_INT_DATA::NAME => Some(COMMAND_INT_DATA::ID),
32425            COMMAND_LONG_DATA::NAME => Some(COMMAND_LONG_DATA::ID),
32426            COMPONENT_INFORMATION_DATA::NAME => Some(COMPONENT_INFORMATION_DATA::ID),
32427            COMPONENT_INFORMATION_BASIC_DATA::NAME => Some(COMPONENT_INFORMATION_BASIC_DATA::ID),
32428            COMPONENT_METADATA_DATA::NAME => Some(COMPONENT_METADATA_DATA::ID),
32429            CONTROL_SYSTEM_STATE_DATA::NAME => Some(CONTROL_SYSTEM_STATE_DATA::ID),
32430            CURRENT_EVENT_SEQUENCE_DATA::NAME => Some(CURRENT_EVENT_SEQUENCE_DATA::ID),
32431            CURRENT_MODE_DATA::NAME => Some(CURRENT_MODE_DATA::ID),
32432            DATA_STREAM_DATA::NAME => Some(DATA_STREAM_DATA::ID),
32433            DATA_TRANSMISSION_HANDSHAKE_DATA::NAME => Some(DATA_TRANSMISSION_HANDSHAKE_DATA::ID),
32434            DEBUG_DATA::NAME => Some(DEBUG_DATA::ID),
32435            DEBUG_FLOAT_ARRAY_DATA::NAME => Some(DEBUG_FLOAT_ARRAY_DATA::ID),
32436            DEBUG_VECT_DATA::NAME => Some(DEBUG_VECT_DATA::ID),
32437            DISTANCE_SENSOR_DATA::NAME => Some(DISTANCE_SENSOR_DATA::ID),
32438            EFI_STATUS_DATA::NAME => Some(EFI_STATUS_DATA::ID),
32439            ENCAPSULATED_DATA_DATA::NAME => Some(ENCAPSULATED_DATA_DATA::ID),
32440            ESC_INFO_DATA::NAME => Some(ESC_INFO_DATA::ID),
32441            ESC_STATUS_DATA::NAME => Some(ESC_STATUS_DATA::ID),
32442            ESTIMATOR_STATUS_DATA::NAME => Some(ESTIMATOR_STATUS_DATA::ID),
32443            EVENT_DATA::NAME => Some(EVENT_DATA::ID),
32444            EXTENDED_SYS_STATE_DATA::NAME => Some(EXTENDED_SYS_STATE_DATA::ID),
32445            FENCE_STATUS_DATA::NAME => Some(FENCE_STATUS_DATA::ID),
32446            FILE_TRANSFER_PROTOCOL_DATA::NAME => Some(FILE_TRANSFER_PROTOCOL_DATA::ID),
32447            FLIGHT_INFORMATION_DATA::NAME => Some(FLIGHT_INFORMATION_DATA::ID),
32448            FOLLOW_TARGET_DATA::NAME => Some(FOLLOW_TARGET_DATA::ID),
32449            FUEL_STATUS_DATA::NAME => Some(FUEL_STATUS_DATA::ID),
32450            GENERATOR_STATUS_DATA::NAME => Some(GENERATOR_STATUS_DATA::ID),
32451            GIMBAL_DEVICE_ATTITUDE_STATUS_DATA::NAME => {
32452                Some(GIMBAL_DEVICE_ATTITUDE_STATUS_DATA::ID)
32453            }
32454            GIMBAL_DEVICE_INFORMATION_DATA::NAME => Some(GIMBAL_DEVICE_INFORMATION_DATA::ID),
32455            GIMBAL_DEVICE_SET_ATTITUDE_DATA::NAME => Some(GIMBAL_DEVICE_SET_ATTITUDE_DATA::ID),
32456            GIMBAL_MANAGER_INFORMATION_DATA::NAME => Some(GIMBAL_MANAGER_INFORMATION_DATA::ID),
32457            GIMBAL_MANAGER_SET_ATTITUDE_DATA::NAME => Some(GIMBAL_MANAGER_SET_ATTITUDE_DATA::ID),
32458            GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA::NAME => {
32459                Some(GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA::ID)
32460            }
32461            GIMBAL_MANAGER_SET_PITCHYAW_DATA::NAME => Some(GIMBAL_MANAGER_SET_PITCHYAW_DATA::ID),
32462            GIMBAL_MANAGER_STATUS_DATA::NAME => Some(GIMBAL_MANAGER_STATUS_DATA::ID),
32463            GLOBAL_POSITION_INT_DATA::NAME => Some(GLOBAL_POSITION_INT_DATA::ID),
32464            GLOBAL_POSITION_INT_COV_DATA::NAME => Some(GLOBAL_POSITION_INT_COV_DATA::ID),
32465            GLOBAL_VISION_POSITION_ESTIMATE_DATA::NAME => {
32466                Some(GLOBAL_VISION_POSITION_ESTIMATE_DATA::ID)
32467            }
32468            GPS2_RAW_DATA::NAME => Some(GPS2_RAW_DATA::ID),
32469            GPS2_RTK_DATA::NAME => Some(GPS2_RTK_DATA::ID),
32470            GPS_GLOBAL_ORIGIN_DATA::NAME => Some(GPS_GLOBAL_ORIGIN_DATA::ID),
32471            GPS_INJECT_DATA_DATA::NAME => Some(GPS_INJECT_DATA_DATA::ID),
32472            GPS_INPUT_DATA::NAME => Some(GPS_INPUT_DATA::ID),
32473            GPS_RAW_INT_DATA::NAME => Some(GPS_RAW_INT_DATA::ID),
32474            GPS_RTCM_DATA_DATA::NAME => Some(GPS_RTCM_DATA_DATA::ID),
32475            GPS_RTK_DATA::NAME => Some(GPS_RTK_DATA::ID),
32476            GPS_STATUS_DATA::NAME => Some(GPS_STATUS_DATA::ID),
32477            HEARTBEAT_DATA::NAME => Some(HEARTBEAT_DATA::ID),
32478            HIGHRES_IMU_DATA::NAME => Some(HIGHRES_IMU_DATA::ID),
32479            HIGH_LATENCY_DATA::NAME => Some(HIGH_LATENCY_DATA::ID),
32480            HIGH_LATENCY2_DATA::NAME => Some(HIGH_LATENCY2_DATA::ID),
32481            HIL_ACTUATOR_CONTROLS_DATA::NAME => Some(HIL_ACTUATOR_CONTROLS_DATA::ID),
32482            HIL_CONTROLS_DATA::NAME => Some(HIL_CONTROLS_DATA::ID),
32483            HIL_GPS_DATA::NAME => Some(HIL_GPS_DATA::ID),
32484            HIL_OPTICAL_FLOW_DATA::NAME => Some(HIL_OPTICAL_FLOW_DATA::ID),
32485            HIL_RC_INPUTS_RAW_DATA::NAME => Some(HIL_RC_INPUTS_RAW_DATA::ID),
32486            HIL_SENSOR_DATA::NAME => Some(HIL_SENSOR_DATA::ID),
32487            HIL_STATE_DATA::NAME => Some(HIL_STATE_DATA::ID),
32488            HIL_STATE_QUATERNION_DATA::NAME => Some(HIL_STATE_QUATERNION_DATA::ID),
32489            HOME_POSITION_DATA::NAME => Some(HOME_POSITION_DATA::ID),
32490            HYGROMETER_SENSOR_DATA::NAME => Some(HYGROMETER_SENSOR_DATA::ID),
32491            ILLUMINATOR_STATUS_DATA::NAME => Some(ILLUMINATOR_STATUS_DATA::ID),
32492            ISBD_LINK_STATUS_DATA::NAME => Some(ISBD_LINK_STATUS_DATA::ID),
32493            LANDING_TARGET_DATA::NAME => Some(LANDING_TARGET_DATA::ID),
32494            LINK_NODE_STATUS_DATA::NAME => Some(LINK_NODE_STATUS_DATA::ID),
32495            LOCAL_POSITION_NED_DATA::NAME => Some(LOCAL_POSITION_NED_DATA::ID),
32496            LOCAL_POSITION_NED_COV_DATA::NAME => Some(LOCAL_POSITION_NED_COV_DATA::ID),
32497            LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA::NAME => {
32498                Some(LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA::ID)
32499            }
32500            LOGGING_ACK_DATA::NAME => Some(LOGGING_ACK_DATA::ID),
32501            LOGGING_DATA_DATA::NAME => Some(LOGGING_DATA_DATA::ID),
32502            LOGGING_DATA_ACKED_DATA::NAME => Some(LOGGING_DATA_ACKED_DATA::ID),
32503            LOG_DATA_DATA::NAME => Some(LOG_DATA_DATA::ID),
32504            LOG_ENTRY_DATA::NAME => Some(LOG_ENTRY_DATA::ID),
32505            LOG_ERASE_DATA::NAME => Some(LOG_ERASE_DATA::ID),
32506            LOG_REQUEST_DATA_DATA::NAME => Some(LOG_REQUEST_DATA_DATA::ID),
32507            LOG_REQUEST_END_DATA::NAME => Some(LOG_REQUEST_END_DATA::ID),
32508            LOG_REQUEST_LIST_DATA::NAME => Some(LOG_REQUEST_LIST_DATA::ID),
32509            MAG_CAL_REPORT_DATA::NAME => Some(MAG_CAL_REPORT_DATA::ID),
32510            MANUAL_CONTROL_DATA::NAME => Some(MANUAL_CONTROL_DATA::ID),
32511            MANUAL_SETPOINT_DATA::NAME => Some(MANUAL_SETPOINT_DATA::ID),
32512            MEMORY_VECT_DATA::NAME => Some(MEMORY_VECT_DATA::ID),
32513            MESSAGE_INTERVAL_DATA::NAME => Some(MESSAGE_INTERVAL_DATA::ID),
32514            MISSION_ACK_DATA::NAME => Some(MISSION_ACK_DATA::ID),
32515            MISSION_CLEAR_ALL_DATA::NAME => Some(MISSION_CLEAR_ALL_DATA::ID),
32516            MISSION_COUNT_DATA::NAME => Some(MISSION_COUNT_DATA::ID),
32517            MISSION_CURRENT_DATA::NAME => Some(MISSION_CURRENT_DATA::ID),
32518            MISSION_ITEM_DATA::NAME => Some(MISSION_ITEM_DATA::ID),
32519            MISSION_ITEM_INT_DATA::NAME => Some(MISSION_ITEM_INT_DATA::ID),
32520            MISSION_ITEM_REACHED_DATA::NAME => Some(MISSION_ITEM_REACHED_DATA::ID),
32521            MISSION_REQUEST_DATA::NAME => Some(MISSION_REQUEST_DATA::ID),
32522            MISSION_REQUEST_INT_DATA::NAME => Some(MISSION_REQUEST_INT_DATA::ID),
32523            MISSION_REQUEST_LIST_DATA::NAME => Some(MISSION_REQUEST_LIST_DATA::ID),
32524            MISSION_REQUEST_PARTIAL_LIST_DATA::NAME => Some(MISSION_REQUEST_PARTIAL_LIST_DATA::ID),
32525            MISSION_SET_CURRENT_DATA::NAME => Some(MISSION_SET_CURRENT_DATA::ID),
32526            MISSION_WRITE_PARTIAL_LIST_DATA::NAME => Some(MISSION_WRITE_PARTIAL_LIST_DATA::ID),
32527            MOUNT_ORIENTATION_DATA::NAME => Some(MOUNT_ORIENTATION_DATA::ID),
32528            NAMED_VALUE_FLOAT_DATA::NAME => Some(NAMED_VALUE_FLOAT_DATA::ID),
32529            NAMED_VALUE_INT_DATA::NAME => Some(NAMED_VALUE_INT_DATA::ID),
32530            NAV_CONTROLLER_OUTPUT_DATA::NAME => Some(NAV_CONTROLLER_OUTPUT_DATA::ID),
32531            OBSTACLE_DISTANCE_DATA::NAME => Some(OBSTACLE_DISTANCE_DATA::ID),
32532            ODOMETRY_DATA::NAME => Some(ODOMETRY_DATA::ID),
32533            ONBOARD_COMPUTER_STATUS_DATA::NAME => Some(ONBOARD_COMPUTER_STATUS_DATA::ID),
32534            OPEN_DRONE_ID_ARM_STATUS_DATA::NAME => Some(OPEN_DRONE_ID_ARM_STATUS_DATA::ID),
32535            OPEN_DRONE_ID_AUTHENTICATION_DATA::NAME => Some(OPEN_DRONE_ID_AUTHENTICATION_DATA::ID),
32536            OPEN_DRONE_ID_BASIC_ID_DATA::NAME => Some(OPEN_DRONE_ID_BASIC_ID_DATA::ID),
32537            OPEN_DRONE_ID_LOCATION_DATA::NAME => Some(OPEN_DRONE_ID_LOCATION_DATA::ID),
32538            OPEN_DRONE_ID_MESSAGE_PACK_DATA::NAME => Some(OPEN_DRONE_ID_MESSAGE_PACK_DATA::ID),
32539            OPEN_DRONE_ID_OPERATOR_ID_DATA::NAME => Some(OPEN_DRONE_ID_OPERATOR_ID_DATA::ID),
32540            OPEN_DRONE_ID_SELF_ID_DATA::NAME => Some(OPEN_DRONE_ID_SELF_ID_DATA::ID),
32541            OPEN_DRONE_ID_SYSTEM_DATA::NAME => Some(OPEN_DRONE_ID_SYSTEM_DATA::ID),
32542            OPEN_DRONE_ID_SYSTEM_UPDATE_DATA::NAME => Some(OPEN_DRONE_ID_SYSTEM_UPDATE_DATA::ID),
32543            OPTICAL_FLOW_DATA::NAME => Some(OPTICAL_FLOW_DATA::ID),
32544            OPTICAL_FLOW_RAD_DATA::NAME => Some(OPTICAL_FLOW_RAD_DATA::ID),
32545            ORBIT_EXECUTION_STATUS_DATA::NAME => Some(ORBIT_EXECUTION_STATUS_DATA::ID),
32546            PARAM_EXT_ACK_DATA::NAME => Some(PARAM_EXT_ACK_DATA::ID),
32547            PARAM_EXT_REQUEST_LIST_DATA::NAME => Some(PARAM_EXT_REQUEST_LIST_DATA::ID),
32548            PARAM_EXT_REQUEST_READ_DATA::NAME => Some(PARAM_EXT_REQUEST_READ_DATA::ID),
32549            PARAM_EXT_SET_DATA::NAME => Some(PARAM_EXT_SET_DATA::ID),
32550            PARAM_EXT_VALUE_DATA::NAME => Some(PARAM_EXT_VALUE_DATA::ID),
32551            PARAM_MAP_RC_DATA::NAME => Some(PARAM_MAP_RC_DATA::ID),
32552            PARAM_REQUEST_LIST_DATA::NAME => Some(PARAM_REQUEST_LIST_DATA::ID),
32553            PARAM_REQUEST_READ_DATA::NAME => Some(PARAM_REQUEST_READ_DATA::ID),
32554            PARAM_SET_DATA::NAME => Some(PARAM_SET_DATA::ID),
32555            PARAM_VALUE_DATA::NAME => Some(PARAM_VALUE_DATA::ID),
32556            PING_DATA::NAME => Some(PING_DATA::ID),
32557            PLAY_TUNE_DATA::NAME => Some(PLAY_TUNE_DATA::ID),
32558            PLAY_TUNE_V2_DATA::NAME => Some(PLAY_TUNE_V2_DATA::ID),
32559            POSITION_TARGET_GLOBAL_INT_DATA::NAME => Some(POSITION_TARGET_GLOBAL_INT_DATA::ID),
32560            POSITION_TARGET_LOCAL_NED_DATA::NAME => Some(POSITION_TARGET_LOCAL_NED_DATA::ID),
32561            POWER_STATUS_DATA::NAME => Some(POWER_STATUS_DATA::ID),
32562            PROTOCOL_VERSION_DATA::NAME => Some(PROTOCOL_VERSION_DATA::ID),
32563            RADIO_STATUS_DATA::NAME => Some(RADIO_STATUS_DATA::ID),
32564            RAW_IMU_DATA::NAME => Some(RAW_IMU_DATA::ID),
32565            RAW_PRESSURE_DATA::NAME => Some(RAW_PRESSURE_DATA::ID),
32566            RAW_RPM_DATA::NAME => Some(RAW_RPM_DATA::ID),
32567            RC_CHANNELS_DATA::NAME => Some(RC_CHANNELS_DATA::ID),
32568            RC_CHANNELS_OVERRIDE_DATA::NAME => Some(RC_CHANNELS_OVERRIDE_DATA::ID),
32569            RC_CHANNELS_RAW_DATA::NAME => Some(RC_CHANNELS_RAW_DATA::ID),
32570            RC_CHANNELS_SCALED_DATA::NAME => Some(RC_CHANNELS_SCALED_DATA::ID),
32571            REQUEST_DATA_STREAM_DATA::NAME => Some(REQUEST_DATA_STREAM_DATA::ID),
32572            REQUEST_EVENT_DATA::NAME => Some(REQUEST_EVENT_DATA::ID),
32573            RESOURCE_REQUEST_DATA::NAME => Some(RESOURCE_REQUEST_DATA::ID),
32574            RESPONSE_EVENT_ERROR_DATA::NAME => Some(RESPONSE_EVENT_ERROR_DATA::ID),
32575            SAFETY_ALLOWED_AREA_DATA::NAME => Some(SAFETY_ALLOWED_AREA_DATA::ID),
32576            SAFETY_SET_ALLOWED_AREA_DATA::NAME => Some(SAFETY_SET_ALLOWED_AREA_DATA::ID),
32577            SCALED_IMU_DATA::NAME => Some(SCALED_IMU_DATA::ID),
32578            SCALED_IMU2_DATA::NAME => Some(SCALED_IMU2_DATA::ID),
32579            SCALED_IMU3_DATA::NAME => Some(SCALED_IMU3_DATA::ID),
32580            SCALED_PRESSURE_DATA::NAME => Some(SCALED_PRESSURE_DATA::ID),
32581            SCALED_PRESSURE2_DATA::NAME => Some(SCALED_PRESSURE2_DATA::ID),
32582            SCALED_PRESSURE3_DATA::NAME => Some(SCALED_PRESSURE3_DATA::ID),
32583            SERIAL_CONTROL_DATA::NAME => Some(SERIAL_CONTROL_DATA::ID),
32584            SERVO_OUTPUT_RAW_DATA::NAME => Some(SERVO_OUTPUT_RAW_DATA::ID),
32585            SETUP_SIGNING_DATA::NAME => Some(SETUP_SIGNING_DATA::ID),
32586            SET_ACTUATOR_CONTROL_TARGET_DATA::NAME => Some(SET_ACTUATOR_CONTROL_TARGET_DATA::ID),
32587            SET_ATTITUDE_TARGET_DATA::NAME => Some(SET_ATTITUDE_TARGET_DATA::ID),
32588            SET_GPS_GLOBAL_ORIGIN_DATA::NAME => Some(SET_GPS_GLOBAL_ORIGIN_DATA::ID),
32589            SET_HOME_POSITION_DATA::NAME => Some(SET_HOME_POSITION_DATA::ID),
32590            SET_MODE_DATA::NAME => Some(SET_MODE_DATA::ID),
32591            SET_POSITION_TARGET_GLOBAL_INT_DATA::NAME => {
32592                Some(SET_POSITION_TARGET_GLOBAL_INT_DATA::ID)
32593            }
32594            SET_POSITION_TARGET_LOCAL_NED_DATA::NAME => {
32595                Some(SET_POSITION_TARGET_LOCAL_NED_DATA::ID)
32596            }
32597            SIM_STATE_DATA::NAME => Some(SIM_STATE_DATA::ID),
32598            SMART_BATTERY_INFO_DATA::NAME => Some(SMART_BATTERY_INFO_DATA::ID),
32599            STATUSTEXT_DATA::NAME => Some(STATUSTEXT_DATA::ID),
32600            STORAGE_INFORMATION_DATA::NAME => Some(STORAGE_INFORMATION_DATA::ID),
32601            SUPPORTED_TUNES_DATA::NAME => Some(SUPPORTED_TUNES_DATA::ID),
32602            SYSTEM_TIME_DATA::NAME => Some(SYSTEM_TIME_DATA::ID),
32603            SYS_STATUS_DATA::NAME => Some(SYS_STATUS_DATA::ID),
32604            TERRAIN_CHECK_DATA::NAME => Some(TERRAIN_CHECK_DATA::ID),
32605            TERRAIN_DATA_DATA::NAME => Some(TERRAIN_DATA_DATA::ID),
32606            TERRAIN_REPORT_DATA::NAME => Some(TERRAIN_REPORT_DATA::ID),
32607            TERRAIN_REQUEST_DATA::NAME => Some(TERRAIN_REQUEST_DATA::ID),
32608            TIMESYNC_DATA::NAME => Some(TIMESYNC_DATA::ID),
32609            TIME_ESTIMATE_TO_TARGET_DATA::NAME => Some(TIME_ESTIMATE_TO_TARGET_DATA::ID),
32610            TRAJECTORY_REPRESENTATION_BEZIER_DATA::NAME => {
32611                Some(TRAJECTORY_REPRESENTATION_BEZIER_DATA::ID)
32612            }
32613            TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA::NAME => {
32614                Some(TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA::ID)
32615            }
32616            TUNNEL_DATA::NAME => Some(TUNNEL_DATA::ID),
32617            UAVCAN_NODE_INFO_DATA::NAME => Some(UAVCAN_NODE_INFO_DATA::ID),
32618            UAVCAN_NODE_STATUS_DATA::NAME => Some(UAVCAN_NODE_STATUS_DATA::ID),
32619            UTM_GLOBAL_POSITION_DATA::NAME => Some(UTM_GLOBAL_POSITION_DATA::ID),
32620            V2_EXTENSION_DATA::NAME => Some(V2_EXTENSION_DATA::ID),
32621            VFR_HUD_DATA::NAME => Some(VFR_HUD_DATA::ID),
32622            VIBRATION_DATA::NAME => Some(VIBRATION_DATA::ID),
32623            VICON_POSITION_ESTIMATE_DATA::NAME => Some(VICON_POSITION_ESTIMATE_DATA::ID),
32624            VIDEO_STREAM_INFORMATION_DATA::NAME => Some(VIDEO_STREAM_INFORMATION_DATA::ID),
32625            VIDEO_STREAM_STATUS_DATA::NAME => Some(VIDEO_STREAM_STATUS_DATA::ID),
32626            VISION_POSITION_ESTIMATE_DATA::NAME => Some(VISION_POSITION_ESTIMATE_DATA::ID),
32627            VISION_SPEED_ESTIMATE_DATA::NAME => Some(VISION_SPEED_ESTIMATE_DATA::ID),
32628            WHEEL_DISTANCE_DATA::NAME => Some(WHEEL_DISTANCE_DATA::ID),
32629            WIFI_CONFIG_AP_DATA::NAME => Some(WIFI_CONFIG_AP_DATA::ID),
32630            WINCH_STATUS_DATA::NAME => Some(WINCH_STATUS_DATA::ID),
32631            WIND_COV_DATA::NAME => Some(WIND_COV_DATA::ID),
32632            _ => None,
32633        }
32634    }
32635    fn default_message_from_id(id: u32) -> Option<Self> {
32636        match id {
32637            ACTUATOR_CONTROL_TARGET_DATA::ID => Some(Self::ACTUATOR_CONTROL_TARGET(
32638                ACTUATOR_CONTROL_TARGET_DATA::default(),
32639            )),
32640            ACTUATOR_OUTPUT_STATUS_DATA::ID => Some(Self::ACTUATOR_OUTPUT_STATUS(
32641                ACTUATOR_OUTPUT_STATUS_DATA::default(),
32642            )),
32643            ADSB_VEHICLE_DATA::ID => Some(Self::ADSB_VEHICLE(ADSB_VEHICLE_DATA::default())),
32644            AIS_VESSEL_DATA::ID => Some(Self::AIS_VESSEL(AIS_VESSEL_DATA::default())),
32645            ALTITUDE_DATA::ID => Some(Self::ALTITUDE(ALTITUDE_DATA::default())),
32646            ATTITUDE_DATA::ID => Some(Self::ATTITUDE(ATTITUDE_DATA::default())),
32647            ATTITUDE_QUATERNION_DATA::ID => Some(Self::ATTITUDE_QUATERNION(
32648                ATTITUDE_QUATERNION_DATA::default(),
32649            )),
32650            ATTITUDE_QUATERNION_COV_DATA::ID => Some(Self::ATTITUDE_QUATERNION_COV(
32651                ATTITUDE_QUATERNION_COV_DATA::default(),
32652            )),
32653            ATTITUDE_TARGET_DATA::ID => {
32654                Some(Self::ATTITUDE_TARGET(ATTITUDE_TARGET_DATA::default()))
32655            }
32656            ATT_POS_MOCAP_DATA::ID => Some(Self::ATT_POS_MOCAP(ATT_POS_MOCAP_DATA::default())),
32657            AUTH_KEY_DATA::ID => Some(Self::AUTH_KEY(AUTH_KEY_DATA::default())),
32658            AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA::ID => {
32659                Some(Self::AUTOPILOT_STATE_FOR_GIMBAL_DEVICE(
32660                    AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA::default(),
32661                ))
32662            }
32663            AUTOPILOT_VERSION_DATA::ID => {
32664                Some(Self::AUTOPILOT_VERSION(AUTOPILOT_VERSION_DATA::default()))
32665            }
32666            AVAILABLE_MODES_DATA::ID => {
32667                Some(Self::AVAILABLE_MODES(AVAILABLE_MODES_DATA::default()))
32668            }
32669            AVAILABLE_MODES_MONITOR_DATA::ID => Some(Self::AVAILABLE_MODES_MONITOR(
32670                AVAILABLE_MODES_MONITOR_DATA::default(),
32671            )),
32672            BATTERY_INFO_DATA::ID => Some(Self::BATTERY_INFO(BATTERY_INFO_DATA::default())),
32673            BATTERY_STATUS_DATA::ID => Some(Self::BATTERY_STATUS(BATTERY_STATUS_DATA::default())),
32674            BUTTON_CHANGE_DATA::ID => Some(Self::BUTTON_CHANGE(BUTTON_CHANGE_DATA::default())),
32675            CAMERA_CAPTURE_STATUS_DATA::ID => Some(Self::CAMERA_CAPTURE_STATUS(
32676                CAMERA_CAPTURE_STATUS_DATA::default(),
32677            )),
32678            CAMERA_FOV_STATUS_DATA::ID => {
32679                Some(Self::CAMERA_FOV_STATUS(CAMERA_FOV_STATUS_DATA::default()))
32680            }
32681            CAMERA_IMAGE_CAPTURED_DATA::ID => Some(Self::CAMERA_IMAGE_CAPTURED(
32682                CAMERA_IMAGE_CAPTURED_DATA::default(),
32683            )),
32684            CAMERA_INFORMATION_DATA::ID => {
32685                Some(Self::CAMERA_INFORMATION(CAMERA_INFORMATION_DATA::default()))
32686            }
32687            CAMERA_SETTINGS_DATA::ID => {
32688                Some(Self::CAMERA_SETTINGS(CAMERA_SETTINGS_DATA::default()))
32689            }
32690            CAMERA_THERMAL_RANGE_DATA::ID => Some(Self::CAMERA_THERMAL_RANGE(
32691                CAMERA_THERMAL_RANGE_DATA::default(),
32692            )),
32693            CAMERA_TRACKING_GEO_STATUS_DATA::ID => Some(Self::CAMERA_TRACKING_GEO_STATUS(
32694                CAMERA_TRACKING_GEO_STATUS_DATA::default(),
32695            )),
32696            CAMERA_TRACKING_IMAGE_STATUS_DATA::ID => Some(Self::CAMERA_TRACKING_IMAGE_STATUS(
32697                CAMERA_TRACKING_IMAGE_STATUS_DATA::default(),
32698            )),
32699            CAMERA_TRIGGER_DATA::ID => Some(Self::CAMERA_TRIGGER(CAMERA_TRIGGER_DATA::default())),
32700            CANFD_FRAME_DATA::ID => Some(Self::CANFD_FRAME(CANFD_FRAME_DATA::default())),
32701            CAN_FILTER_MODIFY_DATA::ID => {
32702                Some(Self::CAN_FILTER_MODIFY(CAN_FILTER_MODIFY_DATA::default()))
32703            }
32704            CAN_FRAME_DATA::ID => Some(Self::CAN_FRAME(CAN_FRAME_DATA::default())),
32705            CELLULAR_CONFIG_DATA::ID => {
32706                Some(Self::CELLULAR_CONFIG(CELLULAR_CONFIG_DATA::default()))
32707            }
32708            CELLULAR_STATUS_DATA::ID => {
32709                Some(Self::CELLULAR_STATUS(CELLULAR_STATUS_DATA::default()))
32710            }
32711            CHANGE_OPERATOR_CONTROL_DATA::ID => Some(Self::CHANGE_OPERATOR_CONTROL(
32712                CHANGE_OPERATOR_CONTROL_DATA::default(),
32713            )),
32714            CHANGE_OPERATOR_CONTROL_ACK_DATA::ID => Some(Self::CHANGE_OPERATOR_CONTROL_ACK(
32715                CHANGE_OPERATOR_CONTROL_ACK_DATA::default(),
32716            )),
32717            COLLISION_DATA::ID => Some(Self::COLLISION(COLLISION_DATA::default())),
32718            COMMAND_ACK_DATA::ID => Some(Self::COMMAND_ACK(COMMAND_ACK_DATA::default())),
32719            COMMAND_CANCEL_DATA::ID => Some(Self::COMMAND_CANCEL(COMMAND_CANCEL_DATA::default())),
32720            COMMAND_INT_DATA::ID => Some(Self::COMMAND_INT(COMMAND_INT_DATA::default())),
32721            COMMAND_LONG_DATA::ID => Some(Self::COMMAND_LONG(COMMAND_LONG_DATA::default())),
32722            COMPONENT_INFORMATION_DATA::ID => Some(Self::COMPONENT_INFORMATION(
32723                COMPONENT_INFORMATION_DATA::default(),
32724            )),
32725            COMPONENT_INFORMATION_BASIC_DATA::ID => Some(Self::COMPONENT_INFORMATION_BASIC(
32726                COMPONENT_INFORMATION_BASIC_DATA::default(),
32727            )),
32728            COMPONENT_METADATA_DATA::ID => {
32729                Some(Self::COMPONENT_METADATA(COMPONENT_METADATA_DATA::default()))
32730            }
32731            CONTROL_SYSTEM_STATE_DATA::ID => Some(Self::CONTROL_SYSTEM_STATE(
32732                CONTROL_SYSTEM_STATE_DATA::default(),
32733            )),
32734            CURRENT_EVENT_SEQUENCE_DATA::ID => Some(Self::CURRENT_EVENT_SEQUENCE(
32735                CURRENT_EVENT_SEQUENCE_DATA::default(),
32736            )),
32737            CURRENT_MODE_DATA::ID => Some(Self::CURRENT_MODE(CURRENT_MODE_DATA::default())),
32738            DATA_STREAM_DATA::ID => Some(Self::DATA_STREAM(DATA_STREAM_DATA::default())),
32739            DATA_TRANSMISSION_HANDSHAKE_DATA::ID => Some(Self::DATA_TRANSMISSION_HANDSHAKE(
32740                DATA_TRANSMISSION_HANDSHAKE_DATA::default(),
32741            )),
32742            DEBUG_DATA::ID => Some(Self::DEBUG(DEBUG_DATA::default())),
32743            DEBUG_FLOAT_ARRAY_DATA::ID => {
32744                Some(Self::DEBUG_FLOAT_ARRAY(DEBUG_FLOAT_ARRAY_DATA::default()))
32745            }
32746            DEBUG_VECT_DATA::ID => Some(Self::DEBUG_VECT(DEBUG_VECT_DATA::default())),
32747            DISTANCE_SENSOR_DATA::ID => {
32748                Some(Self::DISTANCE_SENSOR(DISTANCE_SENSOR_DATA::default()))
32749            }
32750            EFI_STATUS_DATA::ID => Some(Self::EFI_STATUS(EFI_STATUS_DATA::default())),
32751            ENCAPSULATED_DATA_DATA::ID => {
32752                Some(Self::ENCAPSULATED_DATA(ENCAPSULATED_DATA_DATA::default()))
32753            }
32754            ESC_INFO_DATA::ID => Some(Self::ESC_INFO(ESC_INFO_DATA::default())),
32755            ESC_STATUS_DATA::ID => Some(Self::ESC_STATUS(ESC_STATUS_DATA::default())),
32756            ESTIMATOR_STATUS_DATA::ID => {
32757                Some(Self::ESTIMATOR_STATUS(ESTIMATOR_STATUS_DATA::default()))
32758            }
32759            EVENT_DATA::ID => Some(Self::EVENT(EVENT_DATA::default())),
32760            EXTENDED_SYS_STATE_DATA::ID => {
32761                Some(Self::EXTENDED_SYS_STATE(EXTENDED_SYS_STATE_DATA::default()))
32762            }
32763            FENCE_STATUS_DATA::ID => Some(Self::FENCE_STATUS(FENCE_STATUS_DATA::default())),
32764            FILE_TRANSFER_PROTOCOL_DATA::ID => Some(Self::FILE_TRANSFER_PROTOCOL(
32765                FILE_TRANSFER_PROTOCOL_DATA::default(),
32766            )),
32767            FLIGHT_INFORMATION_DATA::ID => {
32768                Some(Self::FLIGHT_INFORMATION(FLIGHT_INFORMATION_DATA::default()))
32769            }
32770            FOLLOW_TARGET_DATA::ID => Some(Self::FOLLOW_TARGET(FOLLOW_TARGET_DATA::default())),
32771            FUEL_STATUS_DATA::ID => Some(Self::FUEL_STATUS(FUEL_STATUS_DATA::default())),
32772            GENERATOR_STATUS_DATA::ID => {
32773                Some(Self::GENERATOR_STATUS(GENERATOR_STATUS_DATA::default()))
32774            }
32775            GIMBAL_DEVICE_ATTITUDE_STATUS_DATA::ID => Some(Self::GIMBAL_DEVICE_ATTITUDE_STATUS(
32776                GIMBAL_DEVICE_ATTITUDE_STATUS_DATA::default(),
32777            )),
32778            GIMBAL_DEVICE_INFORMATION_DATA::ID => Some(Self::GIMBAL_DEVICE_INFORMATION(
32779                GIMBAL_DEVICE_INFORMATION_DATA::default(),
32780            )),
32781            GIMBAL_DEVICE_SET_ATTITUDE_DATA::ID => Some(Self::GIMBAL_DEVICE_SET_ATTITUDE(
32782                GIMBAL_DEVICE_SET_ATTITUDE_DATA::default(),
32783            )),
32784            GIMBAL_MANAGER_INFORMATION_DATA::ID => Some(Self::GIMBAL_MANAGER_INFORMATION(
32785                GIMBAL_MANAGER_INFORMATION_DATA::default(),
32786            )),
32787            GIMBAL_MANAGER_SET_ATTITUDE_DATA::ID => Some(Self::GIMBAL_MANAGER_SET_ATTITUDE(
32788                GIMBAL_MANAGER_SET_ATTITUDE_DATA::default(),
32789            )),
32790            GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA::ID => {
32791                Some(Self::GIMBAL_MANAGER_SET_MANUAL_CONTROL(
32792                    GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA::default(),
32793                ))
32794            }
32795            GIMBAL_MANAGER_SET_PITCHYAW_DATA::ID => Some(Self::GIMBAL_MANAGER_SET_PITCHYAW(
32796                GIMBAL_MANAGER_SET_PITCHYAW_DATA::default(),
32797            )),
32798            GIMBAL_MANAGER_STATUS_DATA::ID => Some(Self::GIMBAL_MANAGER_STATUS(
32799                GIMBAL_MANAGER_STATUS_DATA::default(),
32800            )),
32801            GLOBAL_POSITION_INT_DATA::ID => Some(Self::GLOBAL_POSITION_INT(
32802                GLOBAL_POSITION_INT_DATA::default(),
32803            )),
32804            GLOBAL_POSITION_INT_COV_DATA::ID => Some(Self::GLOBAL_POSITION_INT_COV(
32805                GLOBAL_POSITION_INT_COV_DATA::default(),
32806            )),
32807            GLOBAL_VISION_POSITION_ESTIMATE_DATA::ID => {
32808                Some(Self::GLOBAL_VISION_POSITION_ESTIMATE(
32809                    GLOBAL_VISION_POSITION_ESTIMATE_DATA::default(),
32810                ))
32811            }
32812            GPS2_RAW_DATA::ID => Some(Self::GPS2_RAW(GPS2_RAW_DATA::default())),
32813            GPS2_RTK_DATA::ID => Some(Self::GPS2_RTK(GPS2_RTK_DATA::default())),
32814            GPS_GLOBAL_ORIGIN_DATA::ID => {
32815                Some(Self::GPS_GLOBAL_ORIGIN(GPS_GLOBAL_ORIGIN_DATA::default()))
32816            }
32817            GPS_INJECT_DATA_DATA::ID => {
32818                Some(Self::GPS_INJECT_DATA(GPS_INJECT_DATA_DATA::default()))
32819            }
32820            GPS_INPUT_DATA::ID => Some(Self::GPS_INPUT(GPS_INPUT_DATA::default())),
32821            GPS_RAW_INT_DATA::ID => Some(Self::GPS_RAW_INT(GPS_RAW_INT_DATA::default())),
32822            GPS_RTCM_DATA_DATA::ID => Some(Self::GPS_RTCM_DATA(GPS_RTCM_DATA_DATA::default())),
32823            GPS_RTK_DATA::ID => Some(Self::GPS_RTK(GPS_RTK_DATA::default())),
32824            GPS_STATUS_DATA::ID => Some(Self::GPS_STATUS(GPS_STATUS_DATA::default())),
32825            HEARTBEAT_DATA::ID => Some(Self::HEARTBEAT(HEARTBEAT_DATA::default())),
32826            HIGHRES_IMU_DATA::ID => Some(Self::HIGHRES_IMU(HIGHRES_IMU_DATA::default())),
32827            HIGH_LATENCY_DATA::ID => Some(Self::HIGH_LATENCY(HIGH_LATENCY_DATA::default())),
32828            HIGH_LATENCY2_DATA::ID => Some(Self::HIGH_LATENCY2(HIGH_LATENCY2_DATA::default())),
32829            HIL_ACTUATOR_CONTROLS_DATA::ID => Some(Self::HIL_ACTUATOR_CONTROLS(
32830                HIL_ACTUATOR_CONTROLS_DATA::default(),
32831            )),
32832            HIL_CONTROLS_DATA::ID => Some(Self::HIL_CONTROLS(HIL_CONTROLS_DATA::default())),
32833            HIL_GPS_DATA::ID => Some(Self::HIL_GPS(HIL_GPS_DATA::default())),
32834            HIL_OPTICAL_FLOW_DATA::ID => {
32835                Some(Self::HIL_OPTICAL_FLOW(HIL_OPTICAL_FLOW_DATA::default()))
32836            }
32837            HIL_RC_INPUTS_RAW_DATA::ID => {
32838                Some(Self::HIL_RC_INPUTS_RAW(HIL_RC_INPUTS_RAW_DATA::default()))
32839            }
32840            HIL_SENSOR_DATA::ID => Some(Self::HIL_SENSOR(HIL_SENSOR_DATA::default())),
32841            HIL_STATE_DATA::ID => Some(Self::HIL_STATE(HIL_STATE_DATA::default())),
32842            HIL_STATE_QUATERNION_DATA::ID => Some(Self::HIL_STATE_QUATERNION(
32843                HIL_STATE_QUATERNION_DATA::default(),
32844            )),
32845            HOME_POSITION_DATA::ID => Some(Self::HOME_POSITION(HOME_POSITION_DATA::default())),
32846            HYGROMETER_SENSOR_DATA::ID => {
32847                Some(Self::HYGROMETER_SENSOR(HYGROMETER_SENSOR_DATA::default()))
32848            }
32849            ILLUMINATOR_STATUS_DATA::ID => {
32850                Some(Self::ILLUMINATOR_STATUS(ILLUMINATOR_STATUS_DATA::default()))
32851            }
32852            ISBD_LINK_STATUS_DATA::ID => {
32853                Some(Self::ISBD_LINK_STATUS(ISBD_LINK_STATUS_DATA::default()))
32854            }
32855            LANDING_TARGET_DATA::ID => Some(Self::LANDING_TARGET(LANDING_TARGET_DATA::default())),
32856            LINK_NODE_STATUS_DATA::ID => {
32857                Some(Self::LINK_NODE_STATUS(LINK_NODE_STATUS_DATA::default()))
32858            }
32859            LOCAL_POSITION_NED_DATA::ID => {
32860                Some(Self::LOCAL_POSITION_NED(LOCAL_POSITION_NED_DATA::default()))
32861            }
32862            LOCAL_POSITION_NED_COV_DATA::ID => Some(Self::LOCAL_POSITION_NED_COV(
32863                LOCAL_POSITION_NED_COV_DATA::default(),
32864            )),
32865            LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA::ID => {
32866                Some(Self::LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET(
32867                    LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA::default(),
32868                ))
32869            }
32870            LOGGING_ACK_DATA::ID => Some(Self::LOGGING_ACK(LOGGING_ACK_DATA::default())),
32871            LOGGING_DATA_DATA::ID => Some(Self::LOGGING_DATA(LOGGING_DATA_DATA::default())),
32872            LOGGING_DATA_ACKED_DATA::ID => {
32873                Some(Self::LOGGING_DATA_ACKED(LOGGING_DATA_ACKED_DATA::default()))
32874            }
32875            LOG_DATA_DATA::ID => Some(Self::LOG_DATA(LOG_DATA_DATA::default())),
32876            LOG_ENTRY_DATA::ID => Some(Self::LOG_ENTRY(LOG_ENTRY_DATA::default())),
32877            LOG_ERASE_DATA::ID => Some(Self::LOG_ERASE(LOG_ERASE_DATA::default())),
32878            LOG_REQUEST_DATA_DATA::ID => {
32879                Some(Self::LOG_REQUEST_DATA(LOG_REQUEST_DATA_DATA::default()))
32880            }
32881            LOG_REQUEST_END_DATA::ID => {
32882                Some(Self::LOG_REQUEST_END(LOG_REQUEST_END_DATA::default()))
32883            }
32884            LOG_REQUEST_LIST_DATA::ID => {
32885                Some(Self::LOG_REQUEST_LIST(LOG_REQUEST_LIST_DATA::default()))
32886            }
32887            MAG_CAL_REPORT_DATA::ID => Some(Self::MAG_CAL_REPORT(MAG_CAL_REPORT_DATA::default())),
32888            MANUAL_CONTROL_DATA::ID => Some(Self::MANUAL_CONTROL(MANUAL_CONTROL_DATA::default())),
32889            MANUAL_SETPOINT_DATA::ID => {
32890                Some(Self::MANUAL_SETPOINT(MANUAL_SETPOINT_DATA::default()))
32891            }
32892            MEMORY_VECT_DATA::ID => Some(Self::MEMORY_VECT(MEMORY_VECT_DATA::default())),
32893            MESSAGE_INTERVAL_DATA::ID => {
32894                Some(Self::MESSAGE_INTERVAL(MESSAGE_INTERVAL_DATA::default()))
32895            }
32896            MISSION_ACK_DATA::ID => Some(Self::MISSION_ACK(MISSION_ACK_DATA::default())),
32897            MISSION_CLEAR_ALL_DATA::ID => {
32898                Some(Self::MISSION_CLEAR_ALL(MISSION_CLEAR_ALL_DATA::default()))
32899            }
32900            MISSION_COUNT_DATA::ID => Some(Self::MISSION_COUNT(MISSION_COUNT_DATA::default())),
32901            MISSION_CURRENT_DATA::ID => {
32902                Some(Self::MISSION_CURRENT(MISSION_CURRENT_DATA::default()))
32903            }
32904            MISSION_ITEM_DATA::ID => Some(Self::MISSION_ITEM(MISSION_ITEM_DATA::default())),
32905            MISSION_ITEM_INT_DATA::ID => {
32906                Some(Self::MISSION_ITEM_INT(MISSION_ITEM_INT_DATA::default()))
32907            }
32908            MISSION_ITEM_REACHED_DATA::ID => Some(Self::MISSION_ITEM_REACHED(
32909                MISSION_ITEM_REACHED_DATA::default(),
32910            )),
32911            MISSION_REQUEST_DATA::ID => {
32912                Some(Self::MISSION_REQUEST(MISSION_REQUEST_DATA::default()))
32913            }
32914            MISSION_REQUEST_INT_DATA::ID => Some(Self::MISSION_REQUEST_INT(
32915                MISSION_REQUEST_INT_DATA::default(),
32916            )),
32917            MISSION_REQUEST_LIST_DATA::ID => Some(Self::MISSION_REQUEST_LIST(
32918                MISSION_REQUEST_LIST_DATA::default(),
32919            )),
32920            MISSION_REQUEST_PARTIAL_LIST_DATA::ID => Some(Self::MISSION_REQUEST_PARTIAL_LIST(
32921                MISSION_REQUEST_PARTIAL_LIST_DATA::default(),
32922            )),
32923            MISSION_SET_CURRENT_DATA::ID => Some(Self::MISSION_SET_CURRENT(
32924                MISSION_SET_CURRENT_DATA::default(),
32925            )),
32926            MISSION_WRITE_PARTIAL_LIST_DATA::ID => Some(Self::MISSION_WRITE_PARTIAL_LIST(
32927                MISSION_WRITE_PARTIAL_LIST_DATA::default(),
32928            )),
32929            MOUNT_ORIENTATION_DATA::ID => {
32930                Some(Self::MOUNT_ORIENTATION(MOUNT_ORIENTATION_DATA::default()))
32931            }
32932            NAMED_VALUE_FLOAT_DATA::ID => {
32933                Some(Self::NAMED_VALUE_FLOAT(NAMED_VALUE_FLOAT_DATA::default()))
32934            }
32935            NAMED_VALUE_INT_DATA::ID => {
32936                Some(Self::NAMED_VALUE_INT(NAMED_VALUE_INT_DATA::default()))
32937            }
32938            NAV_CONTROLLER_OUTPUT_DATA::ID => Some(Self::NAV_CONTROLLER_OUTPUT(
32939                NAV_CONTROLLER_OUTPUT_DATA::default(),
32940            )),
32941            OBSTACLE_DISTANCE_DATA::ID => {
32942                Some(Self::OBSTACLE_DISTANCE(OBSTACLE_DISTANCE_DATA::default()))
32943            }
32944            ODOMETRY_DATA::ID => Some(Self::ODOMETRY(ODOMETRY_DATA::default())),
32945            ONBOARD_COMPUTER_STATUS_DATA::ID => Some(Self::ONBOARD_COMPUTER_STATUS(
32946                ONBOARD_COMPUTER_STATUS_DATA::default(),
32947            )),
32948            OPEN_DRONE_ID_ARM_STATUS_DATA::ID => Some(Self::OPEN_DRONE_ID_ARM_STATUS(
32949                OPEN_DRONE_ID_ARM_STATUS_DATA::default(),
32950            )),
32951            OPEN_DRONE_ID_AUTHENTICATION_DATA::ID => Some(Self::OPEN_DRONE_ID_AUTHENTICATION(
32952                OPEN_DRONE_ID_AUTHENTICATION_DATA::default(),
32953            )),
32954            OPEN_DRONE_ID_BASIC_ID_DATA::ID => Some(Self::OPEN_DRONE_ID_BASIC_ID(
32955                OPEN_DRONE_ID_BASIC_ID_DATA::default(),
32956            )),
32957            OPEN_DRONE_ID_LOCATION_DATA::ID => Some(Self::OPEN_DRONE_ID_LOCATION(
32958                OPEN_DRONE_ID_LOCATION_DATA::default(),
32959            )),
32960            OPEN_DRONE_ID_MESSAGE_PACK_DATA::ID => Some(Self::OPEN_DRONE_ID_MESSAGE_PACK(
32961                OPEN_DRONE_ID_MESSAGE_PACK_DATA::default(),
32962            )),
32963            OPEN_DRONE_ID_OPERATOR_ID_DATA::ID => Some(Self::OPEN_DRONE_ID_OPERATOR_ID(
32964                OPEN_DRONE_ID_OPERATOR_ID_DATA::default(),
32965            )),
32966            OPEN_DRONE_ID_SELF_ID_DATA::ID => Some(Self::OPEN_DRONE_ID_SELF_ID(
32967                OPEN_DRONE_ID_SELF_ID_DATA::default(),
32968            )),
32969            OPEN_DRONE_ID_SYSTEM_DATA::ID => Some(Self::OPEN_DRONE_ID_SYSTEM(
32970                OPEN_DRONE_ID_SYSTEM_DATA::default(),
32971            )),
32972            OPEN_DRONE_ID_SYSTEM_UPDATE_DATA::ID => Some(Self::OPEN_DRONE_ID_SYSTEM_UPDATE(
32973                OPEN_DRONE_ID_SYSTEM_UPDATE_DATA::default(),
32974            )),
32975            OPTICAL_FLOW_DATA::ID => Some(Self::OPTICAL_FLOW(OPTICAL_FLOW_DATA::default())),
32976            OPTICAL_FLOW_RAD_DATA::ID => {
32977                Some(Self::OPTICAL_FLOW_RAD(OPTICAL_FLOW_RAD_DATA::default()))
32978            }
32979            ORBIT_EXECUTION_STATUS_DATA::ID => Some(Self::ORBIT_EXECUTION_STATUS(
32980                ORBIT_EXECUTION_STATUS_DATA::default(),
32981            )),
32982            PARAM_EXT_ACK_DATA::ID => Some(Self::PARAM_EXT_ACK(PARAM_EXT_ACK_DATA::default())),
32983            PARAM_EXT_REQUEST_LIST_DATA::ID => Some(Self::PARAM_EXT_REQUEST_LIST(
32984                PARAM_EXT_REQUEST_LIST_DATA::default(),
32985            )),
32986            PARAM_EXT_REQUEST_READ_DATA::ID => Some(Self::PARAM_EXT_REQUEST_READ(
32987                PARAM_EXT_REQUEST_READ_DATA::default(),
32988            )),
32989            PARAM_EXT_SET_DATA::ID => Some(Self::PARAM_EXT_SET(PARAM_EXT_SET_DATA::default())),
32990            PARAM_EXT_VALUE_DATA::ID => {
32991                Some(Self::PARAM_EXT_VALUE(PARAM_EXT_VALUE_DATA::default()))
32992            }
32993            PARAM_MAP_RC_DATA::ID => Some(Self::PARAM_MAP_RC(PARAM_MAP_RC_DATA::default())),
32994            PARAM_REQUEST_LIST_DATA::ID => {
32995                Some(Self::PARAM_REQUEST_LIST(PARAM_REQUEST_LIST_DATA::default()))
32996            }
32997            PARAM_REQUEST_READ_DATA::ID => {
32998                Some(Self::PARAM_REQUEST_READ(PARAM_REQUEST_READ_DATA::default()))
32999            }
33000            PARAM_SET_DATA::ID => Some(Self::PARAM_SET(PARAM_SET_DATA::default())),
33001            PARAM_VALUE_DATA::ID => Some(Self::PARAM_VALUE(PARAM_VALUE_DATA::default())),
33002            PING_DATA::ID => Some(Self::PING(PING_DATA::default())),
33003            PLAY_TUNE_DATA::ID => Some(Self::PLAY_TUNE(PLAY_TUNE_DATA::default())),
33004            PLAY_TUNE_V2_DATA::ID => Some(Self::PLAY_TUNE_V2(PLAY_TUNE_V2_DATA::default())),
33005            POSITION_TARGET_GLOBAL_INT_DATA::ID => Some(Self::POSITION_TARGET_GLOBAL_INT(
33006                POSITION_TARGET_GLOBAL_INT_DATA::default(),
33007            )),
33008            POSITION_TARGET_LOCAL_NED_DATA::ID => Some(Self::POSITION_TARGET_LOCAL_NED(
33009                POSITION_TARGET_LOCAL_NED_DATA::default(),
33010            )),
33011            POWER_STATUS_DATA::ID => Some(Self::POWER_STATUS(POWER_STATUS_DATA::default())),
33012            PROTOCOL_VERSION_DATA::ID => {
33013                Some(Self::PROTOCOL_VERSION(PROTOCOL_VERSION_DATA::default()))
33014            }
33015            RADIO_STATUS_DATA::ID => Some(Self::RADIO_STATUS(RADIO_STATUS_DATA::default())),
33016            RAW_IMU_DATA::ID => Some(Self::RAW_IMU(RAW_IMU_DATA::default())),
33017            RAW_PRESSURE_DATA::ID => Some(Self::RAW_PRESSURE(RAW_PRESSURE_DATA::default())),
33018            RAW_RPM_DATA::ID => Some(Self::RAW_RPM(RAW_RPM_DATA::default())),
33019            RC_CHANNELS_DATA::ID => Some(Self::RC_CHANNELS(RC_CHANNELS_DATA::default())),
33020            RC_CHANNELS_OVERRIDE_DATA::ID => Some(Self::RC_CHANNELS_OVERRIDE(
33021                RC_CHANNELS_OVERRIDE_DATA::default(),
33022            )),
33023            RC_CHANNELS_RAW_DATA::ID => {
33024                Some(Self::RC_CHANNELS_RAW(RC_CHANNELS_RAW_DATA::default()))
33025            }
33026            RC_CHANNELS_SCALED_DATA::ID => {
33027                Some(Self::RC_CHANNELS_SCALED(RC_CHANNELS_SCALED_DATA::default()))
33028            }
33029            REQUEST_DATA_STREAM_DATA::ID => Some(Self::REQUEST_DATA_STREAM(
33030                REQUEST_DATA_STREAM_DATA::default(),
33031            )),
33032            REQUEST_EVENT_DATA::ID => Some(Self::REQUEST_EVENT(REQUEST_EVENT_DATA::default())),
33033            RESOURCE_REQUEST_DATA::ID => {
33034                Some(Self::RESOURCE_REQUEST(RESOURCE_REQUEST_DATA::default()))
33035            }
33036            RESPONSE_EVENT_ERROR_DATA::ID => Some(Self::RESPONSE_EVENT_ERROR(
33037                RESPONSE_EVENT_ERROR_DATA::default(),
33038            )),
33039            SAFETY_ALLOWED_AREA_DATA::ID => Some(Self::SAFETY_ALLOWED_AREA(
33040                SAFETY_ALLOWED_AREA_DATA::default(),
33041            )),
33042            SAFETY_SET_ALLOWED_AREA_DATA::ID => Some(Self::SAFETY_SET_ALLOWED_AREA(
33043                SAFETY_SET_ALLOWED_AREA_DATA::default(),
33044            )),
33045            SCALED_IMU_DATA::ID => Some(Self::SCALED_IMU(SCALED_IMU_DATA::default())),
33046            SCALED_IMU2_DATA::ID => Some(Self::SCALED_IMU2(SCALED_IMU2_DATA::default())),
33047            SCALED_IMU3_DATA::ID => Some(Self::SCALED_IMU3(SCALED_IMU3_DATA::default())),
33048            SCALED_PRESSURE_DATA::ID => {
33049                Some(Self::SCALED_PRESSURE(SCALED_PRESSURE_DATA::default()))
33050            }
33051            SCALED_PRESSURE2_DATA::ID => {
33052                Some(Self::SCALED_PRESSURE2(SCALED_PRESSURE2_DATA::default()))
33053            }
33054            SCALED_PRESSURE3_DATA::ID => {
33055                Some(Self::SCALED_PRESSURE3(SCALED_PRESSURE3_DATA::default()))
33056            }
33057            SERIAL_CONTROL_DATA::ID => Some(Self::SERIAL_CONTROL(SERIAL_CONTROL_DATA::default())),
33058            SERVO_OUTPUT_RAW_DATA::ID => {
33059                Some(Self::SERVO_OUTPUT_RAW(SERVO_OUTPUT_RAW_DATA::default()))
33060            }
33061            SETUP_SIGNING_DATA::ID => Some(Self::SETUP_SIGNING(SETUP_SIGNING_DATA::default())),
33062            SET_ACTUATOR_CONTROL_TARGET_DATA::ID => Some(Self::SET_ACTUATOR_CONTROL_TARGET(
33063                SET_ACTUATOR_CONTROL_TARGET_DATA::default(),
33064            )),
33065            SET_ATTITUDE_TARGET_DATA::ID => Some(Self::SET_ATTITUDE_TARGET(
33066                SET_ATTITUDE_TARGET_DATA::default(),
33067            )),
33068            SET_GPS_GLOBAL_ORIGIN_DATA::ID => Some(Self::SET_GPS_GLOBAL_ORIGIN(
33069                SET_GPS_GLOBAL_ORIGIN_DATA::default(),
33070            )),
33071            SET_HOME_POSITION_DATA::ID => {
33072                Some(Self::SET_HOME_POSITION(SET_HOME_POSITION_DATA::default()))
33073            }
33074            SET_MODE_DATA::ID => Some(Self::SET_MODE(SET_MODE_DATA::default())),
33075            SET_POSITION_TARGET_GLOBAL_INT_DATA::ID => Some(Self::SET_POSITION_TARGET_GLOBAL_INT(
33076                SET_POSITION_TARGET_GLOBAL_INT_DATA::default(),
33077            )),
33078            SET_POSITION_TARGET_LOCAL_NED_DATA::ID => Some(Self::SET_POSITION_TARGET_LOCAL_NED(
33079                SET_POSITION_TARGET_LOCAL_NED_DATA::default(),
33080            )),
33081            SIM_STATE_DATA::ID => Some(Self::SIM_STATE(SIM_STATE_DATA::default())),
33082            SMART_BATTERY_INFO_DATA::ID => {
33083                Some(Self::SMART_BATTERY_INFO(SMART_BATTERY_INFO_DATA::default()))
33084            }
33085            STATUSTEXT_DATA::ID => Some(Self::STATUSTEXT(STATUSTEXT_DATA::default())),
33086            STORAGE_INFORMATION_DATA::ID => Some(Self::STORAGE_INFORMATION(
33087                STORAGE_INFORMATION_DATA::default(),
33088            )),
33089            SUPPORTED_TUNES_DATA::ID => {
33090                Some(Self::SUPPORTED_TUNES(SUPPORTED_TUNES_DATA::default()))
33091            }
33092            SYSTEM_TIME_DATA::ID => Some(Self::SYSTEM_TIME(SYSTEM_TIME_DATA::default())),
33093            SYS_STATUS_DATA::ID => Some(Self::SYS_STATUS(SYS_STATUS_DATA::default())),
33094            TERRAIN_CHECK_DATA::ID => Some(Self::TERRAIN_CHECK(TERRAIN_CHECK_DATA::default())),
33095            TERRAIN_DATA_DATA::ID => Some(Self::TERRAIN_DATA(TERRAIN_DATA_DATA::default())),
33096            TERRAIN_REPORT_DATA::ID => Some(Self::TERRAIN_REPORT(TERRAIN_REPORT_DATA::default())),
33097            TERRAIN_REQUEST_DATA::ID => {
33098                Some(Self::TERRAIN_REQUEST(TERRAIN_REQUEST_DATA::default()))
33099            }
33100            TIMESYNC_DATA::ID => Some(Self::TIMESYNC(TIMESYNC_DATA::default())),
33101            TIME_ESTIMATE_TO_TARGET_DATA::ID => Some(Self::TIME_ESTIMATE_TO_TARGET(
33102                TIME_ESTIMATE_TO_TARGET_DATA::default(),
33103            )),
33104            TRAJECTORY_REPRESENTATION_BEZIER_DATA::ID => {
33105                Some(Self::TRAJECTORY_REPRESENTATION_BEZIER(
33106                    TRAJECTORY_REPRESENTATION_BEZIER_DATA::default(),
33107                ))
33108            }
33109            TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA::ID => {
33110                Some(Self::TRAJECTORY_REPRESENTATION_WAYPOINTS(
33111                    TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA::default(),
33112                ))
33113            }
33114            TUNNEL_DATA::ID => Some(Self::TUNNEL(TUNNEL_DATA::default())),
33115            UAVCAN_NODE_INFO_DATA::ID => {
33116                Some(Self::UAVCAN_NODE_INFO(UAVCAN_NODE_INFO_DATA::default()))
33117            }
33118            UAVCAN_NODE_STATUS_DATA::ID => {
33119                Some(Self::UAVCAN_NODE_STATUS(UAVCAN_NODE_STATUS_DATA::default()))
33120            }
33121            UTM_GLOBAL_POSITION_DATA::ID => Some(Self::UTM_GLOBAL_POSITION(
33122                UTM_GLOBAL_POSITION_DATA::default(),
33123            )),
33124            V2_EXTENSION_DATA::ID => Some(Self::V2_EXTENSION(V2_EXTENSION_DATA::default())),
33125            VFR_HUD_DATA::ID => Some(Self::VFR_HUD(VFR_HUD_DATA::default())),
33126            VIBRATION_DATA::ID => Some(Self::VIBRATION(VIBRATION_DATA::default())),
33127            VICON_POSITION_ESTIMATE_DATA::ID => Some(Self::VICON_POSITION_ESTIMATE(
33128                VICON_POSITION_ESTIMATE_DATA::default(),
33129            )),
33130            VIDEO_STREAM_INFORMATION_DATA::ID => Some(Self::VIDEO_STREAM_INFORMATION(
33131                VIDEO_STREAM_INFORMATION_DATA::default(),
33132            )),
33133            VIDEO_STREAM_STATUS_DATA::ID => Some(Self::VIDEO_STREAM_STATUS(
33134                VIDEO_STREAM_STATUS_DATA::default(),
33135            )),
33136            VISION_POSITION_ESTIMATE_DATA::ID => Some(Self::VISION_POSITION_ESTIMATE(
33137                VISION_POSITION_ESTIMATE_DATA::default(),
33138            )),
33139            VISION_SPEED_ESTIMATE_DATA::ID => Some(Self::VISION_SPEED_ESTIMATE(
33140                VISION_SPEED_ESTIMATE_DATA::default(),
33141            )),
33142            WHEEL_DISTANCE_DATA::ID => Some(Self::WHEEL_DISTANCE(WHEEL_DISTANCE_DATA::default())),
33143            WIFI_CONFIG_AP_DATA::ID => Some(Self::WIFI_CONFIG_AP(WIFI_CONFIG_AP_DATA::default())),
33144            WINCH_STATUS_DATA::ID => Some(Self::WINCH_STATUS(WINCH_STATUS_DATA::default())),
33145            WIND_COV_DATA::ID => Some(Self::WIND_COV(WIND_COV_DATA::default())),
33146            _ => None,
33147        }
33148    }
33149    #[cfg(feature = "arbitrary")]
33150    fn random_message_from_id<R: rand::RngCore>(id: u32, rng: &mut R) -> Option<Self> {
33151        match id {
33152            ACTUATOR_CONTROL_TARGET_DATA::ID => Some(Self::ACTUATOR_CONTROL_TARGET(
33153                ACTUATOR_CONTROL_TARGET_DATA::random(rng),
33154            )),
33155            ACTUATOR_OUTPUT_STATUS_DATA::ID => Some(Self::ACTUATOR_OUTPUT_STATUS(
33156                ACTUATOR_OUTPUT_STATUS_DATA::random(rng),
33157            )),
33158            ADSB_VEHICLE_DATA::ID => Some(Self::ADSB_VEHICLE(ADSB_VEHICLE_DATA::random(rng))),
33159            AIS_VESSEL_DATA::ID => Some(Self::AIS_VESSEL(AIS_VESSEL_DATA::random(rng))),
33160            ALTITUDE_DATA::ID => Some(Self::ALTITUDE(ALTITUDE_DATA::random(rng))),
33161            ATTITUDE_DATA::ID => Some(Self::ATTITUDE(ATTITUDE_DATA::random(rng))),
33162            ATTITUDE_QUATERNION_DATA::ID => Some(Self::ATTITUDE_QUATERNION(
33163                ATTITUDE_QUATERNION_DATA::random(rng),
33164            )),
33165            ATTITUDE_QUATERNION_COV_DATA::ID => Some(Self::ATTITUDE_QUATERNION_COV(
33166                ATTITUDE_QUATERNION_COV_DATA::random(rng),
33167            )),
33168            ATTITUDE_TARGET_DATA::ID => {
33169                Some(Self::ATTITUDE_TARGET(ATTITUDE_TARGET_DATA::random(rng)))
33170            }
33171            ATT_POS_MOCAP_DATA::ID => Some(Self::ATT_POS_MOCAP(ATT_POS_MOCAP_DATA::random(rng))),
33172            AUTH_KEY_DATA::ID => Some(Self::AUTH_KEY(AUTH_KEY_DATA::random(rng))),
33173            AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA::ID => {
33174                Some(Self::AUTOPILOT_STATE_FOR_GIMBAL_DEVICE(
33175                    AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA::random(rng),
33176                ))
33177            }
33178            AUTOPILOT_VERSION_DATA::ID => {
33179                Some(Self::AUTOPILOT_VERSION(AUTOPILOT_VERSION_DATA::random(rng)))
33180            }
33181            AVAILABLE_MODES_DATA::ID => {
33182                Some(Self::AVAILABLE_MODES(AVAILABLE_MODES_DATA::random(rng)))
33183            }
33184            AVAILABLE_MODES_MONITOR_DATA::ID => Some(Self::AVAILABLE_MODES_MONITOR(
33185                AVAILABLE_MODES_MONITOR_DATA::random(rng),
33186            )),
33187            BATTERY_INFO_DATA::ID => Some(Self::BATTERY_INFO(BATTERY_INFO_DATA::random(rng))),
33188            BATTERY_STATUS_DATA::ID => Some(Self::BATTERY_STATUS(BATTERY_STATUS_DATA::random(rng))),
33189            BUTTON_CHANGE_DATA::ID => Some(Self::BUTTON_CHANGE(BUTTON_CHANGE_DATA::random(rng))),
33190            CAMERA_CAPTURE_STATUS_DATA::ID => Some(Self::CAMERA_CAPTURE_STATUS(
33191                CAMERA_CAPTURE_STATUS_DATA::random(rng),
33192            )),
33193            CAMERA_FOV_STATUS_DATA::ID => {
33194                Some(Self::CAMERA_FOV_STATUS(CAMERA_FOV_STATUS_DATA::random(rng)))
33195            }
33196            CAMERA_IMAGE_CAPTURED_DATA::ID => Some(Self::CAMERA_IMAGE_CAPTURED(
33197                CAMERA_IMAGE_CAPTURED_DATA::random(rng),
33198            )),
33199            CAMERA_INFORMATION_DATA::ID => Some(Self::CAMERA_INFORMATION(
33200                CAMERA_INFORMATION_DATA::random(rng),
33201            )),
33202            CAMERA_SETTINGS_DATA::ID => {
33203                Some(Self::CAMERA_SETTINGS(CAMERA_SETTINGS_DATA::random(rng)))
33204            }
33205            CAMERA_THERMAL_RANGE_DATA::ID => Some(Self::CAMERA_THERMAL_RANGE(
33206                CAMERA_THERMAL_RANGE_DATA::random(rng),
33207            )),
33208            CAMERA_TRACKING_GEO_STATUS_DATA::ID => Some(Self::CAMERA_TRACKING_GEO_STATUS(
33209                CAMERA_TRACKING_GEO_STATUS_DATA::random(rng),
33210            )),
33211            CAMERA_TRACKING_IMAGE_STATUS_DATA::ID => Some(Self::CAMERA_TRACKING_IMAGE_STATUS(
33212                CAMERA_TRACKING_IMAGE_STATUS_DATA::random(rng),
33213            )),
33214            CAMERA_TRIGGER_DATA::ID => Some(Self::CAMERA_TRIGGER(CAMERA_TRIGGER_DATA::random(rng))),
33215            CANFD_FRAME_DATA::ID => Some(Self::CANFD_FRAME(CANFD_FRAME_DATA::random(rng))),
33216            CAN_FILTER_MODIFY_DATA::ID => {
33217                Some(Self::CAN_FILTER_MODIFY(CAN_FILTER_MODIFY_DATA::random(rng)))
33218            }
33219            CAN_FRAME_DATA::ID => Some(Self::CAN_FRAME(CAN_FRAME_DATA::random(rng))),
33220            CELLULAR_CONFIG_DATA::ID => {
33221                Some(Self::CELLULAR_CONFIG(CELLULAR_CONFIG_DATA::random(rng)))
33222            }
33223            CELLULAR_STATUS_DATA::ID => {
33224                Some(Self::CELLULAR_STATUS(CELLULAR_STATUS_DATA::random(rng)))
33225            }
33226            CHANGE_OPERATOR_CONTROL_DATA::ID => Some(Self::CHANGE_OPERATOR_CONTROL(
33227                CHANGE_OPERATOR_CONTROL_DATA::random(rng),
33228            )),
33229            CHANGE_OPERATOR_CONTROL_ACK_DATA::ID => Some(Self::CHANGE_OPERATOR_CONTROL_ACK(
33230                CHANGE_OPERATOR_CONTROL_ACK_DATA::random(rng),
33231            )),
33232            COLLISION_DATA::ID => Some(Self::COLLISION(COLLISION_DATA::random(rng))),
33233            COMMAND_ACK_DATA::ID => Some(Self::COMMAND_ACK(COMMAND_ACK_DATA::random(rng))),
33234            COMMAND_CANCEL_DATA::ID => Some(Self::COMMAND_CANCEL(COMMAND_CANCEL_DATA::random(rng))),
33235            COMMAND_INT_DATA::ID => Some(Self::COMMAND_INT(COMMAND_INT_DATA::random(rng))),
33236            COMMAND_LONG_DATA::ID => Some(Self::COMMAND_LONG(COMMAND_LONG_DATA::random(rng))),
33237            COMPONENT_INFORMATION_DATA::ID => Some(Self::COMPONENT_INFORMATION(
33238                COMPONENT_INFORMATION_DATA::random(rng),
33239            )),
33240            COMPONENT_INFORMATION_BASIC_DATA::ID => Some(Self::COMPONENT_INFORMATION_BASIC(
33241                COMPONENT_INFORMATION_BASIC_DATA::random(rng),
33242            )),
33243            COMPONENT_METADATA_DATA::ID => Some(Self::COMPONENT_METADATA(
33244                COMPONENT_METADATA_DATA::random(rng),
33245            )),
33246            CONTROL_SYSTEM_STATE_DATA::ID => Some(Self::CONTROL_SYSTEM_STATE(
33247                CONTROL_SYSTEM_STATE_DATA::random(rng),
33248            )),
33249            CURRENT_EVENT_SEQUENCE_DATA::ID => Some(Self::CURRENT_EVENT_SEQUENCE(
33250                CURRENT_EVENT_SEQUENCE_DATA::random(rng),
33251            )),
33252            CURRENT_MODE_DATA::ID => Some(Self::CURRENT_MODE(CURRENT_MODE_DATA::random(rng))),
33253            DATA_STREAM_DATA::ID => Some(Self::DATA_STREAM(DATA_STREAM_DATA::random(rng))),
33254            DATA_TRANSMISSION_HANDSHAKE_DATA::ID => Some(Self::DATA_TRANSMISSION_HANDSHAKE(
33255                DATA_TRANSMISSION_HANDSHAKE_DATA::random(rng),
33256            )),
33257            DEBUG_DATA::ID => Some(Self::DEBUG(DEBUG_DATA::random(rng))),
33258            DEBUG_FLOAT_ARRAY_DATA::ID => {
33259                Some(Self::DEBUG_FLOAT_ARRAY(DEBUG_FLOAT_ARRAY_DATA::random(rng)))
33260            }
33261            DEBUG_VECT_DATA::ID => Some(Self::DEBUG_VECT(DEBUG_VECT_DATA::random(rng))),
33262            DISTANCE_SENSOR_DATA::ID => {
33263                Some(Self::DISTANCE_SENSOR(DISTANCE_SENSOR_DATA::random(rng)))
33264            }
33265            EFI_STATUS_DATA::ID => Some(Self::EFI_STATUS(EFI_STATUS_DATA::random(rng))),
33266            ENCAPSULATED_DATA_DATA::ID => {
33267                Some(Self::ENCAPSULATED_DATA(ENCAPSULATED_DATA_DATA::random(rng)))
33268            }
33269            ESC_INFO_DATA::ID => Some(Self::ESC_INFO(ESC_INFO_DATA::random(rng))),
33270            ESC_STATUS_DATA::ID => Some(Self::ESC_STATUS(ESC_STATUS_DATA::random(rng))),
33271            ESTIMATOR_STATUS_DATA::ID => {
33272                Some(Self::ESTIMATOR_STATUS(ESTIMATOR_STATUS_DATA::random(rng)))
33273            }
33274            EVENT_DATA::ID => Some(Self::EVENT(EVENT_DATA::random(rng))),
33275            EXTENDED_SYS_STATE_DATA::ID => Some(Self::EXTENDED_SYS_STATE(
33276                EXTENDED_SYS_STATE_DATA::random(rng),
33277            )),
33278            FENCE_STATUS_DATA::ID => Some(Self::FENCE_STATUS(FENCE_STATUS_DATA::random(rng))),
33279            FILE_TRANSFER_PROTOCOL_DATA::ID => Some(Self::FILE_TRANSFER_PROTOCOL(
33280                FILE_TRANSFER_PROTOCOL_DATA::random(rng),
33281            )),
33282            FLIGHT_INFORMATION_DATA::ID => Some(Self::FLIGHT_INFORMATION(
33283                FLIGHT_INFORMATION_DATA::random(rng),
33284            )),
33285            FOLLOW_TARGET_DATA::ID => Some(Self::FOLLOW_TARGET(FOLLOW_TARGET_DATA::random(rng))),
33286            FUEL_STATUS_DATA::ID => Some(Self::FUEL_STATUS(FUEL_STATUS_DATA::random(rng))),
33287            GENERATOR_STATUS_DATA::ID => {
33288                Some(Self::GENERATOR_STATUS(GENERATOR_STATUS_DATA::random(rng)))
33289            }
33290            GIMBAL_DEVICE_ATTITUDE_STATUS_DATA::ID => Some(Self::GIMBAL_DEVICE_ATTITUDE_STATUS(
33291                GIMBAL_DEVICE_ATTITUDE_STATUS_DATA::random(rng),
33292            )),
33293            GIMBAL_DEVICE_INFORMATION_DATA::ID => Some(Self::GIMBAL_DEVICE_INFORMATION(
33294                GIMBAL_DEVICE_INFORMATION_DATA::random(rng),
33295            )),
33296            GIMBAL_DEVICE_SET_ATTITUDE_DATA::ID => Some(Self::GIMBAL_DEVICE_SET_ATTITUDE(
33297                GIMBAL_DEVICE_SET_ATTITUDE_DATA::random(rng),
33298            )),
33299            GIMBAL_MANAGER_INFORMATION_DATA::ID => Some(Self::GIMBAL_MANAGER_INFORMATION(
33300                GIMBAL_MANAGER_INFORMATION_DATA::random(rng),
33301            )),
33302            GIMBAL_MANAGER_SET_ATTITUDE_DATA::ID => Some(Self::GIMBAL_MANAGER_SET_ATTITUDE(
33303                GIMBAL_MANAGER_SET_ATTITUDE_DATA::random(rng),
33304            )),
33305            GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA::ID => {
33306                Some(Self::GIMBAL_MANAGER_SET_MANUAL_CONTROL(
33307                    GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA::random(rng),
33308                ))
33309            }
33310            GIMBAL_MANAGER_SET_PITCHYAW_DATA::ID => Some(Self::GIMBAL_MANAGER_SET_PITCHYAW(
33311                GIMBAL_MANAGER_SET_PITCHYAW_DATA::random(rng),
33312            )),
33313            GIMBAL_MANAGER_STATUS_DATA::ID => Some(Self::GIMBAL_MANAGER_STATUS(
33314                GIMBAL_MANAGER_STATUS_DATA::random(rng),
33315            )),
33316            GLOBAL_POSITION_INT_DATA::ID => Some(Self::GLOBAL_POSITION_INT(
33317                GLOBAL_POSITION_INT_DATA::random(rng),
33318            )),
33319            GLOBAL_POSITION_INT_COV_DATA::ID => Some(Self::GLOBAL_POSITION_INT_COV(
33320                GLOBAL_POSITION_INT_COV_DATA::random(rng),
33321            )),
33322            GLOBAL_VISION_POSITION_ESTIMATE_DATA::ID => {
33323                Some(Self::GLOBAL_VISION_POSITION_ESTIMATE(
33324                    GLOBAL_VISION_POSITION_ESTIMATE_DATA::random(rng),
33325                ))
33326            }
33327            GPS2_RAW_DATA::ID => Some(Self::GPS2_RAW(GPS2_RAW_DATA::random(rng))),
33328            GPS2_RTK_DATA::ID => Some(Self::GPS2_RTK(GPS2_RTK_DATA::random(rng))),
33329            GPS_GLOBAL_ORIGIN_DATA::ID => {
33330                Some(Self::GPS_GLOBAL_ORIGIN(GPS_GLOBAL_ORIGIN_DATA::random(rng)))
33331            }
33332            GPS_INJECT_DATA_DATA::ID => {
33333                Some(Self::GPS_INJECT_DATA(GPS_INJECT_DATA_DATA::random(rng)))
33334            }
33335            GPS_INPUT_DATA::ID => Some(Self::GPS_INPUT(GPS_INPUT_DATA::random(rng))),
33336            GPS_RAW_INT_DATA::ID => Some(Self::GPS_RAW_INT(GPS_RAW_INT_DATA::random(rng))),
33337            GPS_RTCM_DATA_DATA::ID => Some(Self::GPS_RTCM_DATA(GPS_RTCM_DATA_DATA::random(rng))),
33338            GPS_RTK_DATA::ID => Some(Self::GPS_RTK(GPS_RTK_DATA::random(rng))),
33339            GPS_STATUS_DATA::ID => Some(Self::GPS_STATUS(GPS_STATUS_DATA::random(rng))),
33340            HEARTBEAT_DATA::ID => Some(Self::HEARTBEAT(HEARTBEAT_DATA::random(rng))),
33341            HIGHRES_IMU_DATA::ID => Some(Self::HIGHRES_IMU(HIGHRES_IMU_DATA::random(rng))),
33342            HIGH_LATENCY_DATA::ID => Some(Self::HIGH_LATENCY(HIGH_LATENCY_DATA::random(rng))),
33343            HIGH_LATENCY2_DATA::ID => Some(Self::HIGH_LATENCY2(HIGH_LATENCY2_DATA::random(rng))),
33344            HIL_ACTUATOR_CONTROLS_DATA::ID => Some(Self::HIL_ACTUATOR_CONTROLS(
33345                HIL_ACTUATOR_CONTROLS_DATA::random(rng),
33346            )),
33347            HIL_CONTROLS_DATA::ID => Some(Self::HIL_CONTROLS(HIL_CONTROLS_DATA::random(rng))),
33348            HIL_GPS_DATA::ID => Some(Self::HIL_GPS(HIL_GPS_DATA::random(rng))),
33349            HIL_OPTICAL_FLOW_DATA::ID => {
33350                Some(Self::HIL_OPTICAL_FLOW(HIL_OPTICAL_FLOW_DATA::random(rng)))
33351            }
33352            HIL_RC_INPUTS_RAW_DATA::ID => {
33353                Some(Self::HIL_RC_INPUTS_RAW(HIL_RC_INPUTS_RAW_DATA::random(rng)))
33354            }
33355            HIL_SENSOR_DATA::ID => Some(Self::HIL_SENSOR(HIL_SENSOR_DATA::random(rng))),
33356            HIL_STATE_DATA::ID => Some(Self::HIL_STATE(HIL_STATE_DATA::random(rng))),
33357            HIL_STATE_QUATERNION_DATA::ID => Some(Self::HIL_STATE_QUATERNION(
33358                HIL_STATE_QUATERNION_DATA::random(rng),
33359            )),
33360            HOME_POSITION_DATA::ID => Some(Self::HOME_POSITION(HOME_POSITION_DATA::random(rng))),
33361            HYGROMETER_SENSOR_DATA::ID => {
33362                Some(Self::HYGROMETER_SENSOR(HYGROMETER_SENSOR_DATA::random(rng)))
33363            }
33364            ILLUMINATOR_STATUS_DATA::ID => Some(Self::ILLUMINATOR_STATUS(
33365                ILLUMINATOR_STATUS_DATA::random(rng),
33366            )),
33367            ISBD_LINK_STATUS_DATA::ID => {
33368                Some(Self::ISBD_LINK_STATUS(ISBD_LINK_STATUS_DATA::random(rng)))
33369            }
33370            LANDING_TARGET_DATA::ID => Some(Self::LANDING_TARGET(LANDING_TARGET_DATA::random(rng))),
33371            LINK_NODE_STATUS_DATA::ID => {
33372                Some(Self::LINK_NODE_STATUS(LINK_NODE_STATUS_DATA::random(rng)))
33373            }
33374            LOCAL_POSITION_NED_DATA::ID => Some(Self::LOCAL_POSITION_NED(
33375                LOCAL_POSITION_NED_DATA::random(rng),
33376            )),
33377            LOCAL_POSITION_NED_COV_DATA::ID => Some(Self::LOCAL_POSITION_NED_COV(
33378                LOCAL_POSITION_NED_COV_DATA::random(rng),
33379            )),
33380            LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA::ID => {
33381                Some(Self::LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET(
33382                    LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA::random(rng),
33383                ))
33384            }
33385            LOGGING_ACK_DATA::ID => Some(Self::LOGGING_ACK(LOGGING_ACK_DATA::random(rng))),
33386            LOGGING_DATA_DATA::ID => Some(Self::LOGGING_DATA(LOGGING_DATA_DATA::random(rng))),
33387            LOGGING_DATA_ACKED_DATA::ID => Some(Self::LOGGING_DATA_ACKED(
33388                LOGGING_DATA_ACKED_DATA::random(rng),
33389            )),
33390            LOG_DATA_DATA::ID => Some(Self::LOG_DATA(LOG_DATA_DATA::random(rng))),
33391            LOG_ENTRY_DATA::ID => Some(Self::LOG_ENTRY(LOG_ENTRY_DATA::random(rng))),
33392            LOG_ERASE_DATA::ID => Some(Self::LOG_ERASE(LOG_ERASE_DATA::random(rng))),
33393            LOG_REQUEST_DATA_DATA::ID => {
33394                Some(Self::LOG_REQUEST_DATA(LOG_REQUEST_DATA_DATA::random(rng)))
33395            }
33396            LOG_REQUEST_END_DATA::ID => {
33397                Some(Self::LOG_REQUEST_END(LOG_REQUEST_END_DATA::random(rng)))
33398            }
33399            LOG_REQUEST_LIST_DATA::ID => {
33400                Some(Self::LOG_REQUEST_LIST(LOG_REQUEST_LIST_DATA::random(rng)))
33401            }
33402            MAG_CAL_REPORT_DATA::ID => Some(Self::MAG_CAL_REPORT(MAG_CAL_REPORT_DATA::random(rng))),
33403            MANUAL_CONTROL_DATA::ID => Some(Self::MANUAL_CONTROL(MANUAL_CONTROL_DATA::random(rng))),
33404            MANUAL_SETPOINT_DATA::ID => {
33405                Some(Self::MANUAL_SETPOINT(MANUAL_SETPOINT_DATA::random(rng)))
33406            }
33407            MEMORY_VECT_DATA::ID => Some(Self::MEMORY_VECT(MEMORY_VECT_DATA::random(rng))),
33408            MESSAGE_INTERVAL_DATA::ID => {
33409                Some(Self::MESSAGE_INTERVAL(MESSAGE_INTERVAL_DATA::random(rng)))
33410            }
33411            MISSION_ACK_DATA::ID => Some(Self::MISSION_ACK(MISSION_ACK_DATA::random(rng))),
33412            MISSION_CLEAR_ALL_DATA::ID => {
33413                Some(Self::MISSION_CLEAR_ALL(MISSION_CLEAR_ALL_DATA::random(rng)))
33414            }
33415            MISSION_COUNT_DATA::ID => Some(Self::MISSION_COUNT(MISSION_COUNT_DATA::random(rng))),
33416            MISSION_CURRENT_DATA::ID => {
33417                Some(Self::MISSION_CURRENT(MISSION_CURRENT_DATA::random(rng)))
33418            }
33419            MISSION_ITEM_DATA::ID => Some(Self::MISSION_ITEM(MISSION_ITEM_DATA::random(rng))),
33420            MISSION_ITEM_INT_DATA::ID => {
33421                Some(Self::MISSION_ITEM_INT(MISSION_ITEM_INT_DATA::random(rng)))
33422            }
33423            MISSION_ITEM_REACHED_DATA::ID => Some(Self::MISSION_ITEM_REACHED(
33424                MISSION_ITEM_REACHED_DATA::random(rng),
33425            )),
33426            MISSION_REQUEST_DATA::ID => {
33427                Some(Self::MISSION_REQUEST(MISSION_REQUEST_DATA::random(rng)))
33428            }
33429            MISSION_REQUEST_INT_DATA::ID => Some(Self::MISSION_REQUEST_INT(
33430                MISSION_REQUEST_INT_DATA::random(rng),
33431            )),
33432            MISSION_REQUEST_LIST_DATA::ID => Some(Self::MISSION_REQUEST_LIST(
33433                MISSION_REQUEST_LIST_DATA::random(rng),
33434            )),
33435            MISSION_REQUEST_PARTIAL_LIST_DATA::ID => Some(Self::MISSION_REQUEST_PARTIAL_LIST(
33436                MISSION_REQUEST_PARTIAL_LIST_DATA::random(rng),
33437            )),
33438            MISSION_SET_CURRENT_DATA::ID => Some(Self::MISSION_SET_CURRENT(
33439                MISSION_SET_CURRENT_DATA::random(rng),
33440            )),
33441            MISSION_WRITE_PARTIAL_LIST_DATA::ID => Some(Self::MISSION_WRITE_PARTIAL_LIST(
33442                MISSION_WRITE_PARTIAL_LIST_DATA::random(rng),
33443            )),
33444            MOUNT_ORIENTATION_DATA::ID => {
33445                Some(Self::MOUNT_ORIENTATION(MOUNT_ORIENTATION_DATA::random(rng)))
33446            }
33447            NAMED_VALUE_FLOAT_DATA::ID => {
33448                Some(Self::NAMED_VALUE_FLOAT(NAMED_VALUE_FLOAT_DATA::random(rng)))
33449            }
33450            NAMED_VALUE_INT_DATA::ID => {
33451                Some(Self::NAMED_VALUE_INT(NAMED_VALUE_INT_DATA::random(rng)))
33452            }
33453            NAV_CONTROLLER_OUTPUT_DATA::ID => Some(Self::NAV_CONTROLLER_OUTPUT(
33454                NAV_CONTROLLER_OUTPUT_DATA::random(rng),
33455            )),
33456            OBSTACLE_DISTANCE_DATA::ID => {
33457                Some(Self::OBSTACLE_DISTANCE(OBSTACLE_DISTANCE_DATA::random(rng)))
33458            }
33459            ODOMETRY_DATA::ID => Some(Self::ODOMETRY(ODOMETRY_DATA::random(rng))),
33460            ONBOARD_COMPUTER_STATUS_DATA::ID => Some(Self::ONBOARD_COMPUTER_STATUS(
33461                ONBOARD_COMPUTER_STATUS_DATA::random(rng),
33462            )),
33463            OPEN_DRONE_ID_ARM_STATUS_DATA::ID => Some(Self::OPEN_DRONE_ID_ARM_STATUS(
33464                OPEN_DRONE_ID_ARM_STATUS_DATA::random(rng),
33465            )),
33466            OPEN_DRONE_ID_AUTHENTICATION_DATA::ID => Some(Self::OPEN_DRONE_ID_AUTHENTICATION(
33467                OPEN_DRONE_ID_AUTHENTICATION_DATA::random(rng),
33468            )),
33469            OPEN_DRONE_ID_BASIC_ID_DATA::ID => Some(Self::OPEN_DRONE_ID_BASIC_ID(
33470                OPEN_DRONE_ID_BASIC_ID_DATA::random(rng),
33471            )),
33472            OPEN_DRONE_ID_LOCATION_DATA::ID => Some(Self::OPEN_DRONE_ID_LOCATION(
33473                OPEN_DRONE_ID_LOCATION_DATA::random(rng),
33474            )),
33475            OPEN_DRONE_ID_MESSAGE_PACK_DATA::ID => Some(Self::OPEN_DRONE_ID_MESSAGE_PACK(
33476                OPEN_DRONE_ID_MESSAGE_PACK_DATA::random(rng),
33477            )),
33478            OPEN_DRONE_ID_OPERATOR_ID_DATA::ID => Some(Self::OPEN_DRONE_ID_OPERATOR_ID(
33479                OPEN_DRONE_ID_OPERATOR_ID_DATA::random(rng),
33480            )),
33481            OPEN_DRONE_ID_SELF_ID_DATA::ID => Some(Self::OPEN_DRONE_ID_SELF_ID(
33482                OPEN_DRONE_ID_SELF_ID_DATA::random(rng),
33483            )),
33484            OPEN_DRONE_ID_SYSTEM_DATA::ID => Some(Self::OPEN_DRONE_ID_SYSTEM(
33485                OPEN_DRONE_ID_SYSTEM_DATA::random(rng),
33486            )),
33487            OPEN_DRONE_ID_SYSTEM_UPDATE_DATA::ID => Some(Self::OPEN_DRONE_ID_SYSTEM_UPDATE(
33488                OPEN_DRONE_ID_SYSTEM_UPDATE_DATA::random(rng),
33489            )),
33490            OPTICAL_FLOW_DATA::ID => Some(Self::OPTICAL_FLOW(OPTICAL_FLOW_DATA::random(rng))),
33491            OPTICAL_FLOW_RAD_DATA::ID => {
33492                Some(Self::OPTICAL_FLOW_RAD(OPTICAL_FLOW_RAD_DATA::random(rng)))
33493            }
33494            ORBIT_EXECUTION_STATUS_DATA::ID => Some(Self::ORBIT_EXECUTION_STATUS(
33495                ORBIT_EXECUTION_STATUS_DATA::random(rng),
33496            )),
33497            PARAM_EXT_ACK_DATA::ID => Some(Self::PARAM_EXT_ACK(PARAM_EXT_ACK_DATA::random(rng))),
33498            PARAM_EXT_REQUEST_LIST_DATA::ID => Some(Self::PARAM_EXT_REQUEST_LIST(
33499                PARAM_EXT_REQUEST_LIST_DATA::random(rng),
33500            )),
33501            PARAM_EXT_REQUEST_READ_DATA::ID => Some(Self::PARAM_EXT_REQUEST_READ(
33502                PARAM_EXT_REQUEST_READ_DATA::random(rng),
33503            )),
33504            PARAM_EXT_SET_DATA::ID => Some(Self::PARAM_EXT_SET(PARAM_EXT_SET_DATA::random(rng))),
33505            PARAM_EXT_VALUE_DATA::ID => {
33506                Some(Self::PARAM_EXT_VALUE(PARAM_EXT_VALUE_DATA::random(rng)))
33507            }
33508            PARAM_MAP_RC_DATA::ID => Some(Self::PARAM_MAP_RC(PARAM_MAP_RC_DATA::random(rng))),
33509            PARAM_REQUEST_LIST_DATA::ID => Some(Self::PARAM_REQUEST_LIST(
33510                PARAM_REQUEST_LIST_DATA::random(rng),
33511            )),
33512            PARAM_REQUEST_READ_DATA::ID => Some(Self::PARAM_REQUEST_READ(
33513                PARAM_REQUEST_READ_DATA::random(rng),
33514            )),
33515            PARAM_SET_DATA::ID => Some(Self::PARAM_SET(PARAM_SET_DATA::random(rng))),
33516            PARAM_VALUE_DATA::ID => Some(Self::PARAM_VALUE(PARAM_VALUE_DATA::random(rng))),
33517            PING_DATA::ID => Some(Self::PING(PING_DATA::random(rng))),
33518            PLAY_TUNE_DATA::ID => Some(Self::PLAY_TUNE(PLAY_TUNE_DATA::random(rng))),
33519            PLAY_TUNE_V2_DATA::ID => Some(Self::PLAY_TUNE_V2(PLAY_TUNE_V2_DATA::random(rng))),
33520            POSITION_TARGET_GLOBAL_INT_DATA::ID => Some(Self::POSITION_TARGET_GLOBAL_INT(
33521                POSITION_TARGET_GLOBAL_INT_DATA::random(rng),
33522            )),
33523            POSITION_TARGET_LOCAL_NED_DATA::ID => Some(Self::POSITION_TARGET_LOCAL_NED(
33524                POSITION_TARGET_LOCAL_NED_DATA::random(rng),
33525            )),
33526            POWER_STATUS_DATA::ID => Some(Self::POWER_STATUS(POWER_STATUS_DATA::random(rng))),
33527            PROTOCOL_VERSION_DATA::ID => {
33528                Some(Self::PROTOCOL_VERSION(PROTOCOL_VERSION_DATA::random(rng)))
33529            }
33530            RADIO_STATUS_DATA::ID => Some(Self::RADIO_STATUS(RADIO_STATUS_DATA::random(rng))),
33531            RAW_IMU_DATA::ID => Some(Self::RAW_IMU(RAW_IMU_DATA::random(rng))),
33532            RAW_PRESSURE_DATA::ID => Some(Self::RAW_PRESSURE(RAW_PRESSURE_DATA::random(rng))),
33533            RAW_RPM_DATA::ID => Some(Self::RAW_RPM(RAW_RPM_DATA::random(rng))),
33534            RC_CHANNELS_DATA::ID => Some(Self::RC_CHANNELS(RC_CHANNELS_DATA::random(rng))),
33535            RC_CHANNELS_OVERRIDE_DATA::ID => Some(Self::RC_CHANNELS_OVERRIDE(
33536                RC_CHANNELS_OVERRIDE_DATA::random(rng),
33537            )),
33538            RC_CHANNELS_RAW_DATA::ID => {
33539                Some(Self::RC_CHANNELS_RAW(RC_CHANNELS_RAW_DATA::random(rng)))
33540            }
33541            RC_CHANNELS_SCALED_DATA::ID => Some(Self::RC_CHANNELS_SCALED(
33542                RC_CHANNELS_SCALED_DATA::random(rng),
33543            )),
33544            REQUEST_DATA_STREAM_DATA::ID => Some(Self::REQUEST_DATA_STREAM(
33545                REQUEST_DATA_STREAM_DATA::random(rng),
33546            )),
33547            REQUEST_EVENT_DATA::ID => Some(Self::REQUEST_EVENT(REQUEST_EVENT_DATA::random(rng))),
33548            RESOURCE_REQUEST_DATA::ID => {
33549                Some(Self::RESOURCE_REQUEST(RESOURCE_REQUEST_DATA::random(rng)))
33550            }
33551            RESPONSE_EVENT_ERROR_DATA::ID => Some(Self::RESPONSE_EVENT_ERROR(
33552                RESPONSE_EVENT_ERROR_DATA::random(rng),
33553            )),
33554            SAFETY_ALLOWED_AREA_DATA::ID => Some(Self::SAFETY_ALLOWED_AREA(
33555                SAFETY_ALLOWED_AREA_DATA::random(rng),
33556            )),
33557            SAFETY_SET_ALLOWED_AREA_DATA::ID => Some(Self::SAFETY_SET_ALLOWED_AREA(
33558                SAFETY_SET_ALLOWED_AREA_DATA::random(rng),
33559            )),
33560            SCALED_IMU_DATA::ID => Some(Self::SCALED_IMU(SCALED_IMU_DATA::random(rng))),
33561            SCALED_IMU2_DATA::ID => Some(Self::SCALED_IMU2(SCALED_IMU2_DATA::random(rng))),
33562            SCALED_IMU3_DATA::ID => Some(Self::SCALED_IMU3(SCALED_IMU3_DATA::random(rng))),
33563            SCALED_PRESSURE_DATA::ID => {
33564                Some(Self::SCALED_PRESSURE(SCALED_PRESSURE_DATA::random(rng)))
33565            }
33566            SCALED_PRESSURE2_DATA::ID => {
33567                Some(Self::SCALED_PRESSURE2(SCALED_PRESSURE2_DATA::random(rng)))
33568            }
33569            SCALED_PRESSURE3_DATA::ID => {
33570                Some(Self::SCALED_PRESSURE3(SCALED_PRESSURE3_DATA::random(rng)))
33571            }
33572            SERIAL_CONTROL_DATA::ID => Some(Self::SERIAL_CONTROL(SERIAL_CONTROL_DATA::random(rng))),
33573            SERVO_OUTPUT_RAW_DATA::ID => {
33574                Some(Self::SERVO_OUTPUT_RAW(SERVO_OUTPUT_RAW_DATA::random(rng)))
33575            }
33576            SETUP_SIGNING_DATA::ID => Some(Self::SETUP_SIGNING(SETUP_SIGNING_DATA::random(rng))),
33577            SET_ACTUATOR_CONTROL_TARGET_DATA::ID => Some(Self::SET_ACTUATOR_CONTROL_TARGET(
33578                SET_ACTUATOR_CONTROL_TARGET_DATA::random(rng),
33579            )),
33580            SET_ATTITUDE_TARGET_DATA::ID => Some(Self::SET_ATTITUDE_TARGET(
33581                SET_ATTITUDE_TARGET_DATA::random(rng),
33582            )),
33583            SET_GPS_GLOBAL_ORIGIN_DATA::ID => Some(Self::SET_GPS_GLOBAL_ORIGIN(
33584                SET_GPS_GLOBAL_ORIGIN_DATA::random(rng),
33585            )),
33586            SET_HOME_POSITION_DATA::ID => {
33587                Some(Self::SET_HOME_POSITION(SET_HOME_POSITION_DATA::random(rng)))
33588            }
33589            SET_MODE_DATA::ID => Some(Self::SET_MODE(SET_MODE_DATA::random(rng))),
33590            SET_POSITION_TARGET_GLOBAL_INT_DATA::ID => Some(Self::SET_POSITION_TARGET_GLOBAL_INT(
33591                SET_POSITION_TARGET_GLOBAL_INT_DATA::random(rng),
33592            )),
33593            SET_POSITION_TARGET_LOCAL_NED_DATA::ID => Some(Self::SET_POSITION_TARGET_LOCAL_NED(
33594                SET_POSITION_TARGET_LOCAL_NED_DATA::random(rng),
33595            )),
33596            SIM_STATE_DATA::ID => Some(Self::SIM_STATE(SIM_STATE_DATA::random(rng))),
33597            SMART_BATTERY_INFO_DATA::ID => Some(Self::SMART_BATTERY_INFO(
33598                SMART_BATTERY_INFO_DATA::random(rng),
33599            )),
33600            STATUSTEXT_DATA::ID => Some(Self::STATUSTEXT(STATUSTEXT_DATA::random(rng))),
33601            STORAGE_INFORMATION_DATA::ID => Some(Self::STORAGE_INFORMATION(
33602                STORAGE_INFORMATION_DATA::random(rng),
33603            )),
33604            SUPPORTED_TUNES_DATA::ID => {
33605                Some(Self::SUPPORTED_TUNES(SUPPORTED_TUNES_DATA::random(rng)))
33606            }
33607            SYSTEM_TIME_DATA::ID => Some(Self::SYSTEM_TIME(SYSTEM_TIME_DATA::random(rng))),
33608            SYS_STATUS_DATA::ID => Some(Self::SYS_STATUS(SYS_STATUS_DATA::random(rng))),
33609            TERRAIN_CHECK_DATA::ID => Some(Self::TERRAIN_CHECK(TERRAIN_CHECK_DATA::random(rng))),
33610            TERRAIN_DATA_DATA::ID => Some(Self::TERRAIN_DATA(TERRAIN_DATA_DATA::random(rng))),
33611            TERRAIN_REPORT_DATA::ID => Some(Self::TERRAIN_REPORT(TERRAIN_REPORT_DATA::random(rng))),
33612            TERRAIN_REQUEST_DATA::ID => {
33613                Some(Self::TERRAIN_REQUEST(TERRAIN_REQUEST_DATA::random(rng)))
33614            }
33615            TIMESYNC_DATA::ID => Some(Self::TIMESYNC(TIMESYNC_DATA::random(rng))),
33616            TIME_ESTIMATE_TO_TARGET_DATA::ID => Some(Self::TIME_ESTIMATE_TO_TARGET(
33617                TIME_ESTIMATE_TO_TARGET_DATA::random(rng),
33618            )),
33619            TRAJECTORY_REPRESENTATION_BEZIER_DATA::ID => {
33620                Some(Self::TRAJECTORY_REPRESENTATION_BEZIER(
33621                    TRAJECTORY_REPRESENTATION_BEZIER_DATA::random(rng),
33622                ))
33623            }
33624            TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA::ID => {
33625                Some(Self::TRAJECTORY_REPRESENTATION_WAYPOINTS(
33626                    TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA::random(rng),
33627                ))
33628            }
33629            TUNNEL_DATA::ID => Some(Self::TUNNEL(TUNNEL_DATA::random(rng))),
33630            UAVCAN_NODE_INFO_DATA::ID => {
33631                Some(Self::UAVCAN_NODE_INFO(UAVCAN_NODE_INFO_DATA::random(rng)))
33632            }
33633            UAVCAN_NODE_STATUS_DATA::ID => Some(Self::UAVCAN_NODE_STATUS(
33634                UAVCAN_NODE_STATUS_DATA::random(rng),
33635            )),
33636            UTM_GLOBAL_POSITION_DATA::ID => Some(Self::UTM_GLOBAL_POSITION(
33637                UTM_GLOBAL_POSITION_DATA::random(rng),
33638            )),
33639            V2_EXTENSION_DATA::ID => Some(Self::V2_EXTENSION(V2_EXTENSION_DATA::random(rng))),
33640            VFR_HUD_DATA::ID => Some(Self::VFR_HUD(VFR_HUD_DATA::random(rng))),
33641            VIBRATION_DATA::ID => Some(Self::VIBRATION(VIBRATION_DATA::random(rng))),
33642            VICON_POSITION_ESTIMATE_DATA::ID => Some(Self::VICON_POSITION_ESTIMATE(
33643                VICON_POSITION_ESTIMATE_DATA::random(rng),
33644            )),
33645            VIDEO_STREAM_INFORMATION_DATA::ID => Some(Self::VIDEO_STREAM_INFORMATION(
33646                VIDEO_STREAM_INFORMATION_DATA::random(rng),
33647            )),
33648            VIDEO_STREAM_STATUS_DATA::ID => Some(Self::VIDEO_STREAM_STATUS(
33649                VIDEO_STREAM_STATUS_DATA::random(rng),
33650            )),
33651            VISION_POSITION_ESTIMATE_DATA::ID => Some(Self::VISION_POSITION_ESTIMATE(
33652                VISION_POSITION_ESTIMATE_DATA::random(rng),
33653            )),
33654            VISION_SPEED_ESTIMATE_DATA::ID => Some(Self::VISION_SPEED_ESTIMATE(
33655                VISION_SPEED_ESTIMATE_DATA::random(rng),
33656            )),
33657            WHEEL_DISTANCE_DATA::ID => Some(Self::WHEEL_DISTANCE(WHEEL_DISTANCE_DATA::random(rng))),
33658            WIFI_CONFIG_AP_DATA::ID => Some(Self::WIFI_CONFIG_AP(WIFI_CONFIG_AP_DATA::random(rng))),
33659            WINCH_STATUS_DATA::ID => Some(Self::WINCH_STATUS(WINCH_STATUS_DATA::random(rng))),
33660            WIND_COV_DATA::ID => Some(Self::WIND_COV(WIND_COV_DATA::random(rng))),
33661            _ => None,
33662        }
33663    }
33664    fn ser(&self, version: MavlinkVersion, bytes: &mut [u8]) -> usize {
33665        match self {
33666            Self::ACTUATOR_CONTROL_TARGET(body) => body.ser(version, bytes),
33667            Self::ACTUATOR_OUTPUT_STATUS(body) => body.ser(version, bytes),
33668            Self::ADSB_VEHICLE(body) => body.ser(version, bytes),
33669            Self::AIS_VESSEL(body) => body.ser(version, bytes),
33670            Self::ALTITUDE(body) => body.ser(version, bytes),
33671            Self::ATTITUDE(body) => body.ser(version, bytes),
33672            Self::ATTITUDE_QUATERNION(body) => body.ser(version, bytes),
33673            Self::ATTITUDE_QUATERNION_COV(body) => body.ser(version, bytes),
33674            Self::ATTITUDE_TARGET(body) => body.ser(version, bytes),
33675            Self::ATT_POS_MOCAP(body) => body.ser(version, bytes),
33676            Self::AUTH_KEY(body) => body.ser(version, bytes),
33677            Self::AUTOPILOT_STATE_FOR_GIMBAL_DEVICE(body) => body.ser(version, bytes),
33678            Self::AUTOPILOT_VERSION(body) => body.ser(version, bytes),
33679            Self::AVAILABLE_MODES(body) => body.ser(version, bytes),
33680            Self::AVAILABLE_MODES_MONITOR(body) => body.ser(version, bytes),
33681            Self::BATTERY_INFO(body) => body.ser(version, bytes),
33682            Self::BATTERY_STATUS(body) => body.ser(version, bytes),
33683            Self::BUTTON_CHANGE(body) => body.ser(version, bytes),
33684            Self::CAMERA_CAPTURE_STATUS(body) => body.ser(version, bytes),
33685            Self::CAMERA_FOV_STATUS(body) => body.ser(version, bytes),
33686            Self::CAMERA_IMAGE_CAPTURED(body) => body.ser(version, bytes),
33687            Self::CAMERA_INFORMATION(body) => body.ser(version, bytes),
33688            Self::CAMERA_SETTINGS(body) => body.ser(version, bytes),
33689            Self::CAMERA_THERMAL_RANGE(body) => body.ser(version, bytes),
33690            Self::CAMERA_TRACKING_GEO_STATUS(body) => body.ser(version, bytes),
33691            Self::CAMERA_TRACKING_IMAGE_STATUS(body) => body.ser(version, bytes),
33692            Self::CAMERA_TRIGGER(body) => body.ser(version, bytes),
33693            Self::CANFD_FRAME(body) => body.ser(version, bytes),
33694            Self::CAN_FILTER_MODIFY(body) => body.ser(version, bytes),
33695            Self::CAN_FRAME(body) => body.ser(version, bytes),
33696            Self::CELLULAR_CONFIG(body) => body.ser(version, bytes),
33697            Self::CELLULAR_STATUS(body) => body.ser(version, bytes),
33698            Self::CHANGE_OPERATOR_CONTROL(body) => body.ser(version, bytes),
33699            Self::CHANGE_OPERATOR_CONTROL_ACK(body) => body.ser(version, bytes),
33700            Self::COLLISION(body) => body.ser(version, bytes),
33701            Self::COMMAND_ACK(body) => body.ser(version, bytes),
33702            Self::COMMAND_CANCEL(body) => body.ser(version, bytes),
33703            Self::COMMAND_INT(body) => body.ser(version, bytes),
33704            Self::COMMAND_LONG(body) => body.ser(version, bytes),
33705            Self::COMPONENT_INFORMATION(body) => body.ser(version, bytes),
33706            Self::COMPONENT_INFORMATION_BASIC(body) => body.ser(version, bytes),
33707            Self::COMPONENT_METADATA(body) => body.ser(version, bytes),
33708            Self::CONTROL_SYSTEM_STATE(body) => body.ser(version, bytes),
33709            Self::CURRENT_EVENT_SEQUENCE(body) => body.ser(version, bytes),
33710            Self::CURRENT_MODE(body) => body.ser(version, bytes),
33711            Self::DATA_STREAM(body) => body.ser(version, bytes),
33712            Self::DATA_TRANSMISSION_HANDSHAKE(body) => body.ser(version, bytes),
33713            Self::DEBUG(body) => body.ser(version, bytes),
33714            Self::DEBUG_FLOAT_ARRAY(body) => body.ser(version, bytes),
33715            Self::DEBUG_VECT(body) => body.ser(version, bytes),
33716            Self::DISTANCE_SENSOR(body) => body.ser(version, bytes),
33717            Self::EFI_STATUS(body) => body.ser(version, bytes),
33718            Self::ENCAPSULATED_DATA(body) => body.ser(version, bytes),
33719            Self::ESC_INFO(body) => body.ser(version, bytes),
33720            Self::ESC_STATUS(body) => body.ser(version, bytes),
33721            Self::ESTIMATOR_STATUS(body) => body.ser(version, bytes),
33722            Self::EVENT(body) => body.ser(version, bytes),
33723            Self::EXTENDED_SYS_STATE(body) => body.ser(version, bytes),
33724            Self::FENCE_STATUS(body) => body.ser(version, bytes),
33725            Self::FILE_TRANSFER_PROTOCOL(body) => body.ser(version, bytes),
33726            Self::FLIGHT_INFORMATION(body) => body.ser(version, bytes),
33727            Self::FOLLOW_TARGET(body) => body.ser(version, bytes),
33728            Self::FUEL_STATUS(body) => body.ser(version, bytes),
33729            Self::GENERATOR_STATUS(body) => body.ser(version, bytes),
33730            Self::GIMBAL_DEVICE_ATTITUDE_STATUS(body) => body.ser(version, bytes),
33731            Self::GIMBAL_DEVICE_INFORMATION(body) => body.ser(version, bytes),
33732            Self::GIMBAL_DEVICE_SET_ATTITUDE(body) => body.ser(version, bytes),
33733            Self::GIMBAL_MANAGER_INFORMATION(body) => body.ser(version, bytes),
33734            Self::GIMBAL_MANAGER_SET_ATTITUDE(body) => body.ser(version, bytes),
33735            Self::GIMBAL_MANAGER_SET_MANUAL_CONTROL(body) => body.ser(version, bytes),
33736            Self::GIMBAL_MANAGER_SET_PITCHYAW(body) => body.ser(version, bytes),
33737            Self::GIMBAL_MANAGER_STATUS(body) => body.ser(version, bytes),
33738            Self::GLOBAL_POSITION_INT(body) => body.ser(version, bytes),
33739            Self::GLOBAL_POSITION_INT_COV(body) => body.ser(version, bytes),
33740            Self::GLOBAL_VISION_POSITION_ESTIMATE(body) => body.ser(version, bytes),
33741            Self::GPS2_RAW(body) => body.ser(version, bytes),
33742            Self::GPS2_RTK(body) => body.ser(version, bytes),
33743            Self::GPS_GLOBAL_ORIGIN(body) => body.ser(version, bytes),
33744            Self::GPS_INJECT_DATA(body) => body.ser(version, bytes),
33745            Self::GPS_INPUT(body) => body.ser(version, bytes),
33746            Self::GPS_RAW_INT(body) => body.ser(version, bytes),
33747            Self::GPS_RTCM_DATA(body) => body.ser(version, bytes),
33748            Self::GPS_RTK(body) => body.ser(version, bytes),
33749            Self::GPS_STATUS(body) => body.ser(version, bytes),
33750            Self::HEARTBEAT(body) => body.ser(version, bytes),
33751            Self::HIGHRES_IMU(body) => body.ser(version, bytes),
33752            Self::HIGH_LATENCY(body) => body.ser(version, bytes),
33753            Self::HIGH_LATENCY2(body) => body.ser(version, bytes),
33754            Self::HIL_ACTUATOR_CONTROLS(body) => body.ser(version, bytes),
33755            Self::HIL_CONTROLS(body) => body.ser(version, bytes),
33756            Self::HIL_GPS(body) => body.ser(version, bytes),
33757            Self::HIL_OPTICAL_FLOW(body) => body.ser(version, bytes),
33758            Self::HIL_RC_INPUTS_RAW(body) => body.ser(version, bytes),
33759            Self::HIL_SENSOR(body) => body.ser(version, bytes),
33760            Self::HIL_STATE(body) => body.ser(version, bytes),
33761            Self::HIL_STATE_QUATERNION(body) => body.ser(version, bytes),
33762            Self::HOME_POSITION(body) => body.ser(version, bytes),
33763            Self::HYGROMETER_SENSOR(body) => body.ser(version, bytes),
33764            Self::ILLUMINATOR_STATUS(body) => body.ser(version, bytes),
33765            Self::ISBD_LINK_STATUS(body) => body.ser(version, bytes),
33766            Self::LANDING_TARGET(body) => body.ser(version, bytes),
33767            Self::LINK_NODE_STATUS(body) => body.ser(version, bytes),
33768            Self::LOCAL_POSITION_NED(body) => body.ser(version, bytes),
33769            Self::LOCAL_POSITION_NED_COV(body) => body.ser(version, bytes),
33770            Self::LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET(body) => body.ser(version, bytes),
33771            Self::LOGGING_ACK(body) => body.ser(version, bytes),
33772            Self::LOGGING_DATA(body) => body.ser(version, bytes),
33773            Self::LOGGING_DATA_ACKED(body) => body.ser(version, bytes),
33774            Self::LOG_DATA(body) => body.ser(version, bytes),
33775            Self::LOG_ENTRY(body) => body.ser(version, bytes),
33776            Self::LOG_ERASE(body) => body.ser(version, bytes),
33777            Self::LOG_REQUEST_DATA(body) => body.ser(version, bytes),
33778            Self::LOG_REQUEST_END(body) => body.ser(version, bytes),
33779            Self::LOG_REQUEST_LIST(body) => body.ser(version, bytes),
33780            Self::MAG_CAL_REPORT(body) => body.ser(version, bytes),
33781            Self::MANUAL_CONTROL(body) => body.ser(version, bytes),
33782            Self::MANUAL_SETPOINT(body) => body.ser(version, bytes),
33783            Self::MEMORY_VECT(body) => body.ser(version, bytes),
33784            Self::MESSAGE_INTERVAL(body) => body.ser(version, bytes),
33785            Self::MISSION_ACK(body) => body.ser(version, bytes),
33786            Self::MISSION_CLEAR_ALL(body) => body.ser(version, bytes),
33787            Self::MISSION_COUNT(body) => body.ser(version, bytes),
33788            Self::MISSION_CURRENT(body) => body.ser(version, bytes),
33789            Self::MISSION_ITEM(body) => body.ser(version, bytes),
33790            Self::MISSION_ITEM_INT(body) => body.ser(version, bytes),
33791            Self::MISSION_ITEM_REACHED(body) => body.ser(version, bytes),
33792            Self::MISSION_REQUEST(body) => body.ser(version, bytes),
33793            Self::MISSION_REQUEST_INT(body) => body.ser(version, bytes),
33794            Self::MISSION_REQUEST_LIST(body) => body.ser(version, bytes),
33795            Self::MISSION_REQUEST_PARTIAL_LIST(body) => body.ser(version, bytes),
33796            Self::MISSION_SET_CURRENT(body) => body.ser(version, bytes),
33797            Self::MISSION_WRITE_PARTIAL_LIST(body) => body.ser(version, bytes),
33798            Self::MOUNT_ORIENTATION(body) => body.ser(version, bytes),
33799            Self::NAMED_VALUE_FLOAT(body) => body.ser(version, bytes),
33800            Self::NAMED_VALUE_INT(body) => body.ser(version, bytes),
33801            Self::NAV_CONTROLLER_OUTPUT(body) => body.ser(version, bytes),
33802            Self::OBSTACLE_DISTANCE(body) => body.ser(version, bytes),
33803            Self::ODOMETRY(body) => body.ser(version, bytes),
33804            Self::ONBOARD_COMPUTER_STATUS(body) => body.ser(version, bytes),
33805            Self::OPEN_DRONE_ID_ARM_STATUS(body) => body.ser(version, bytes),
33806            Self::OPEN_DRONE_ID_AUTHENTICATION(body) => body.ser(version, bytes),
33807            Self::OPEN_DRONE_ID_BASIC_ID(body) => body.ser(version, bytes),
33808            Self::OPEN_DRONE_ID_LOCATION(body) => body.ser(version, bytes),
33809            Self::OPEN_DRONE_ID_MESSAGE_PACK(body) => body.ser(version, bytes),
33810            Self::OPEN_DRONE_ID_OPERATOR_ID(body) => body.ser(version, bytes),
33811            Self::OPEN_DRONE_ID_SELF_ID(body) => body.ser(version, bytes),
33812            Self::OPEN_DRONE_ID_SYSTEM(body) => body.ser(version, bytes),
33813            Self::OPEN_DRONE_ID_SYSTEM_UPDATE(body) => body.ser(version, bytes),
33814            Self::OPTICAL_FLOW(body) => body.ser(version, bytes),
33815            Self::OPTICAL_FLOW_RAD(body) => body.ser(version, bytes),
33816            Self::ORBIT_EXECUTION_STATUS(body) => body.ser(version, bytes),
33817            Self::PARAM_EXT_ACK(body) => body.ser(version, bytes),
33818            Self::PARAM_EXT_REQUEST_LIST(body) => body.ser(version, bytes),
33819            Self::PARAM_EXT_REQUEST_READ(body) => body.ser(version, bytes),
33820            Self::PARAM_EXT_SET(body) => body.ser(version, bytes),
33821            Self::PARAM_EXT_VALUE(body) => body.ser(version, bytes),
33822            Self::PARAM_MAP_RC(body) => body.ser(version, bytes),
33823            Self::PARAM_REQUEST_LIST(body) => body.ser(version, bytes),
33824            Self::PARAM_REQUEST_READ(body) => body.ser(version, bytes),
33825            Self::PARAM_SET(body) => body.ser(version, bytes),
33826            Self::PARAM_VALUE(body) => body.ser(version, bytes),
33827            Self::PING(body) => body.ser(version, bytes),
33828            Self::PLAY_TUNE(body) => body.ser(version, bytes),
33829            Self::PLAY_TUNE_V2(body) => body.ser(version, bytes),
33830            Self::POSITION_TARGET_GLOBAL_INT(body) => body.ser(version, bytes),
33831            Self::POSITION_TARGET_LOCAL_NED(body) => body.ser(version, bytes),
33832            Self::POWER_STATUS(body) => body.ser(version, bytes),
33833            Self::PROTOCOL_VERSION(body) => body.ser(version, bytes),
33834            Self::RADIO_STATUS(body) => body.ser(version, bytes),
33835            Self::RAW_IMU(body) => body.ser(version, bytes),
33836            Self::RAW_PRESSURE(body) => body.ser(version, bytes),
33837            Self::RAW_RPM(body) => body.ser(version, bytes),
33838            Self::RC_CHANNELS(body) => body.ser(version, bytes),
33839            Self::RC_CHANNELS_OVERRIDE(body) => body.ser(version, bytes),
33840            Self::RC_CHANNELS_RAW(body) => body.ser(version, bytes),
33841            Self::RC_CHANNELS_SCALED(body) => body.ser(version, bytes),
33842            Self::REQUEST_DATA_STREAM(body) => body.ser(version, bytes),
33843            Self::REQUEST_EVENT(body) => body.ser(version, bytes),
33844            Self::RESOURCE_REQUEST(body) => body.ser(version, bytes),
33845            Self::RESPONSE_EVENT_ERROR(body) => body.ser(version, bytes),
33846            Self::SAFETY_ALLOWED_AREA(body) => body.ser(version, bytes),
33847            Self::SAFETY_SET_ALLOWED_AREA(body) => body.ser(version, bytes),
33848            Self::SCALED_IMU(body) => body.ser(version, bytes),
33849            Self::SCALED_IMU2(body) => body.ser(version, bytes),
33850            Self::SCALED_IMU3(body) => body.ser(version, bytes),
33851            Self::SCALED_PRESSURE(body) => body.ser(version, bytes),
33852            Self::SCALED_PRESSURE2(body) => body.ser(version, bytes),
33853            Self::SCALED_PRESSURE3(body) => body.ser(version, bytes),
33854            Self::SERIAL_CONTROL(body) => body.ser(version, bytes),
33855            Self::SERVO_OUTPUT_RAW(body) => body.ser(version, bytes),
33856            Self::SETUP_SIGNING(body) => body.ser(version, bytes),
33857            Self::SET_ACTUATOR_CONTROL_TARGET(body) => body.ser(version, bytes),
33858            Self::SET_ATTITUDE_TARGET(body) => body.ser(version, bytes),
33859            Self::SET_GPS_GLOBAL_ORIGIN(body) => body.ser(version, bytes),
33860            Self::SET_HOME_POSITION(body) => body.ser(version, bytes),
33861            Self::SET_MODE(body) => body.ser(version, bytes),
33862            Self::SET_POSITION_TARGET_GLOBAL_INT(body) => body.ser(version, bytes),
33863            Self::SET_POSITION_TARGET_LOCAL_NED(body) => body.ser(version, bytes),
33864            Self::SIM_STATE(body) => body.ser(version, bytes),
33865            Self::SMART_BATTERY_INFO(body) => body.ser(version, bytes),
33866            Self::STATUSTEXT(body) => body.ser(version, bytes),
33867            Self::STORAGE_INFORMATION(body) => body.ser(version, bytes),
33868            Self::SUPPORTED_TUNES(body) => body.ser(version, bytes),
33869            Self::SYSTEM_TIME(body) => body.ser(version, bytes),
33870            Self::SYS_STATUS(body) => body.ser(version, bytes),
33871            Self::TERRAIN_CHECK(body) => body.ser(version, bytes),
33872            Self::TERRAIN_DATA(body) => body.ser(version, bytes),
33873            Self::TERRAIN_REPORT(body) => body.ser(version, bytes),
33874            Self::TERRAIN_REQUEST(body) => body.ser(version, bytes),
33875            Self::TIMESYNC(body) => body.ser(version, bytes),
33876            Self::TIME_ESTIMATE_TO_TARGET(body) => body.ser(version, bytes),
33877            Self::TRAJECTORY_REPRESENTATION_BEZIER(body) => body.ser(version, bytes),
33878            Self::TRAJECTORY_REPRESENTATION_WAYPOINTS(body) => body.ser(version, bytes),
33879            Self::TUNNEL(body) => body.ser(version, bytes),
33880            Self::UAVCAN_NODE_INFO(body) => body.ser(version, bytes),
33881            Self::UAVCAN_NODE_STATUS(body) => body.ser(version, bytes),
33882            Self::UTM_GLOBAL_POSITION(body) => body.ser(version, bytes),
33883            Self::V2_EXTENSION(body) => body.ser(version, bytes),
33884            Self::VFR_HUD(body) => body.ser(version, bytes),
33885            Self::VIBRATION(body) => body.ser(version, bytes),
33886            Self::VICON_POSITION_ESTIMATE(body) => body.ser(version, bytes),
33887            Self::VIDEO_STREAM_INFORMATION(body) => body.ser(version, bytes),
33888            Self::VIDEO_STREAM_STATUS(body) => body.ser(version, bytes),
33889            Self::VISION_POSITION_ESTIMATE(body) => body.ser(version, bytes),
33890            Self::VISION_SPEED_ESTIMATE(body) => body.ser(version, bytes),
33891            Self::WHEEL_DISTANCE(body) => body.ser(version, bytes),
33892            Self::WIFI_CONFIG_AP(body) => body.ser(version, bytes),
33893            Self::WINCH_STATUS(body) => body.ser(version, bytes),
33894            Self::WIND_COV(body) => body.ser(version, bytes),
33895        }
33896    }
33897    fn extra_crc(id: u32) -> u8 {
33898        match id {
33899            ACTUATOR_CONTROL_TARGET_DATA::ID => ACTUATOR_CONTROL_TARGET_DATA::EXTRA_CRC,
33900            ACTUATOR_OUTPUT_STATUS_DATA::ID => ACTUATOR_OUTPUT_STATUS_DATA::EXTRA_CRC,
33901            ADSB_VEHICLE_DATA::ID => ADSB_VEHICLE_DATA::EXTRA_CRC,
33902            AIS_VESSEL_DATA::ID => AIS_VESSEL_DATA::EXTRA_CRC,
33903            ALTITUDE_DATA::ID => ALTITUDE_DATA::EXTRA_CRC,
33904            ATTITUDE_DATA::ID => ATTITUDE_DATA::EXTRA_CRC,
33905            ATTITUDE_QUATERNION_DATA::ID => ATTITUDE_QUATERNION_DATA::EXTRA_CRC,
33906            ATTITUDE_QUATERNION_COV_DATA::ID => ATTITUDE_QUATERNION_COV_DATA::EXTRA_CRC,
33907            ATTITUDE_TARGET_DATA::ID => ATTITUDE_TARGET_DATA::EXTRA_CRC,
33908            ATT_POS_MOCAP_DATA::ID => ATT_POS_MOCAP_DATA::EXTRA_CRC,
33909            AUTH_KEY_DATA::ID => AUTH_KEY_DATA::EXTRA_CRC,
33910            AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA::ID => {
33911                AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_DATA::EXTRA_CRC
33912            }
33913            AUTOPILOT_VERSION_DATA::ID => AUTOPILOT_VERSION_DATA::EXTRA_CRC,
33914            AVAILABLE_MODES_DATA::ID => AVAILABLE_MODES_DATA::EXTRA_CRC,
33915            AVAILABLE_MODES_MONITOR_DATA::ID => AVAILABLE_MODES_MONITOR_DATA::EXTRA_CRC,
33916            BATTERY_INFO_DATA::ID => BATTERY_INFO_DATA::EXTRA_CRC,
33917            BATTERY_STATUS_DATA::ID => BATTERY_STATUS_DATA::EXTRA_CRC,
33918            BUTTON_CHANGE_DATA::ID => BUTTON_CHANGE_DATA::EXTRA_CRC,
33919            CAMERA_CAPTURE_STATUS_DATA::ID => CAMERA_CAPTURE_STATUS_DATA::EXTRA_CRC,
33920            CAMERA_FOV_STATUS_DATA::ID => CAMERA_FOV_STATUS_DATA::EXTRA_CRC,
33921            CAMERA_IMAGE_CAPTURED_DATA::ID => CAMERA_IMAGE_CAPTURED_DATA::EXTRA_CRC,
33922            CAMERA_INFORMATION_DATA::ID => CAMERA_INFORMATION_DATA::EXTRA_CRC,
33923            CAMERA_SETTINGS_DATA::ID => CAMERA_SETTINGS_DATA::EXTRA_CRC,
33924            CAMERA_THERMAL_RANGE_DATA::ID => CAMERA_THERMAL_RANGE_DATA::EXTRA_CRC,
33925            CAMERA_TRACKING_GEO_STATUS_DATA::ID => CAMERA_TRACKING_GEO_STATUS_DATA::EXTRA_CRC,
33926            CAMERA_TRACKING_IMAGE_STATUS_DATA::ID => CAMERA_TRACKING_IMAGE_STATUS_DATA::EXTRA_CRC,
33927            CAMERA_TRIGGER_DATA::ID => CAMERA_TRIGGER_DATA::EXTRA_CRC,
33928            CANFD_FRAME_DATA::ID => CANFD_FRAME_DATA::EXTRA_CRC,
33929            CAN_FILTER_MODIFY_DATA::ID => CAN_FILTER_MODIFY_DATA::EXTRA_CRC,
33930            CAN_FRAME_DATA::ID => CAN_FRAME_DATA::EXTRA_CRC,
33931            CELLULAR_CONFIG_DATA::ID => CELLULAR_CONFIG_DATA::EXTRA_CRC,
33932            CELLULAR_STATUS_DATA::ID => CELLULAR_STATUS_DATA::EXTRA_CRC,
33933            CHANGE_OPERATOR_CONTROL_DATA::ID => CHANGE_OPERATOR_CONTROL_DATA::EXTRA_CRC,
33934            CHANGE_OPERATOR_CONTROL_ACK_DATA::ID => CHANGE_OPERATOR_CONTROL_ACK_DATA::EXTRA_CRC,
33935            COLLISION_DATA::ID => COLLISION_DATA::EXTRA_CRC,
33936            COMMAND_ACK_DATA::ID => COMMAND_ACK_DATA::EXTRA_CRC,
33937            COMMAND_CANCEL_DATA::ID => COMMAND_CANCEL_DATA::EXTRA_CRC,
33938            COMMAND_INT_DATA::ID => COMMAND_INT_DATA::EXTRA_CRC,
33939            COMMAND_LONG_DATA::ID => COMMAND_LONG_DATA::EXTRA_CRC,
33940            COMPONENT_INFORMATION_DATA::ID => COMPONENT_INFORMATION_DATA::EXTRA_CRC,
33941            COMPONENT_INFORMATION_BASIC_DATA::ID => COMPONENT_INFORMATION_BASIC_DATA::EXTRA_CRC,
33942            COMPONENT_METADATA_DATA::ID => COMPONENT_METADATA_DATA::EXTRA_CRC,
33943            CONTROL_SYSTEM_STATE_DATA::ID => CONTROL_SYSTEM_STATE_DATA::EXTRA_CRC,
33944            CURRENT_EVENT_SEQUENCE_DATA::ID => CURRENT_EVENT_SEQUENCE_DATA::EXTRA_CRC,
33945            CURRENT_MODE_DATA::ID => CURRENT_MODE_DATA::EXTRA_CRC,
33946            DATA_STREAM_DATA::ID => DATA_STREAM_DATA::EXTRA_CRC,
33947            DATA_TRANSMISSION_HANDSHAKE_DATA::ID => DATA_TRANSMISSION_HANDSHAKE_DATA::EXTRA_CRC,
33948            DEBUG_DATA::ID => DEBUG_DATA::EXTRA_CRC,
33949            DEBUG_FLOAT_ARRAY_DATA::ID => DEBUG_FLOAT_ARRAY_DATA::EXTRA_CRC,
33950            DEBUG_VECT_DATA::ID => DEBUG_VECT_DATA::EXTRA_CRC,
33951            DISTANCE_SENSOR_DATA::ID => DISTANCE_SENSOR_DATA::EXTRA_CRC,
33952            EFI_STATUS_DATA::ID => EFI_STATUS_DATA::EXTRA_CRC,
33953            ENCAPSULATED_DATA_DATA::ID => ENCAPSULATED_DATA_DATA::EXTRA_CRC,
33954            ESC_INFO_DATA::ID => ESC_INFO_DATA::EXTRA_CRC,
33955            ESC_STATUS_DATA::ID => ESC_STATUS_DATA::EXTRA_CRC,
33956            ESTIMATOR_STATUS_DATA::ID => ESTIMATOR_STATUS_DATA::EXTRA_CRC,
33957            EVENT_DATA::ID => EVENT_DATA::EXTRA_CRC,
33958            EXTENDED_SYS_STATE_DATA::ID => EXTENDED_SYS_STATE_DATA::EXTRA_CRC,
33959            FENCE_STATUS_DATA::ID => FENCE_STATUS_DATA::EXTRA_CRC,
33960            FILE_TRANSFER_PROTOCOL_DATA::ID => FILE_TRANSFER_PROTOCOL_DATA::EXTRA_CRC,
33961            FLIGHT_INFORMATION_DATA::ID => FLIGHT_INFORMATION_DATA::EXTRA_CRC,
33962            FOLLOW_TARGET_DATA::ID => FOLLOW_TARGET_DATA::EXTRA_CRC,
33963            FUEL_STATUS_DATA::ID => FUEL_STATUS_DATA::EXTRA_CRC,
33964            GENERATOR_STATUS_DATA::ID => GENERATOR_STATUS_DATA::EXTRA_CRC,
33965            GIMBAL_DEVICE_ATTITUDE_STATUS_DATA::ID => GIMBAL_DEVICE_ATTITUDE_STATUS_DATA::EXTRA_CRC,
33966            GIMBAL_DEVICE_INFORMATION_DATA::ID => GIMBAL_DEVICE_INFORMATION_DATA::EXTRA_CRC,
33967            GIMBAL_DEVICE_SET_ATTITUDE_DATA::ID => GIMBAL_DEVICE_SET_ATTITUDE_DATA::EXTRA_CRC,
33968            GIMBAL_MANAGER_INFORMATION_DATA::ID => GIMBAL_MANAGER_INFORMATION_DATA::EXTRA_CRC,
33969            GIMBAL_MANAGER_SET_ATTITUDE_DATA::ID => GIMBAL_MANAGER_SET_ATTITUDE_DATA::EXTRA_CRC,
33970            GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA::ID => {
33971                GIMBAL_MANAGER_SET_MANUAL_CONTROL_DATA::EXTRA_CRC
33972            }
33973            GIMBAL_MANAGER_SET_PITCHYAW_DATA::ID => GIMBAL_MANAGER_SET_PITCHYAW_DATA::EXTRA_CRC,
33974            GIMBAL_MANAGER_STATUS_DATA::ID => GIMBAL_MANAGER_STATUS_DATA::EXTRA_CRC,
33975            GLOBAL_POSITION_INT_DATA::ID => GLOBAL_POSITION_INT_DATA::EXTRA_CRC,
33976            GLOBAL_POSITION_INT_COV_DATA::ID => GLOBAL_POSITION_INT_COV_DATA::EXTRA_CRC,
33977            GLOBAL_VISION_POSITION_ESTIMATE_DATA::ID => {
33978                GLOBAL_VISION_POSITION_ESTIMATE_DATA::EXTRA_CRC
33979            }
33980            GPS2_RAW_DATA::ID => GPS2_RAW_DATA::EXTRA_CRC,
33981            GPS2_RTK_DATA::ID => GPS2_RTK_DATA::EXTRA_CRC,
33982            GPS_GLOBAL_ORIGIN_DATA::ID => GPS_GLOBAL_ORIGIN_DATA::EXTRA_CRC,
33983            GPS_INJECT_DATA_DATA::ID => GPS_INJECT_DATA_DATA::EXTRA_CRC,
33984            GPS_INPUT_DATA::ID => GPS_INPUT_DATA::EXTRA_CRC,
33985            GPS_RAW_INT_DATA::ID => GPS_RAW_INT_DATA::EXTRA_CRC,
33986            GPS_RTCM_DATA_DATA::ID => GPS_RTCM_DATA_DATA::EXTRA_CRC,
33987            GPS_RTK_DATA::ID => GPS_RTK_DATA::EXTRA_CRC,
33988            GPS_STATUS_DATA::ID => GPS_STATUS_DATA::EXTRA_CRC,
33989            HEARTBEAT_DATA::ID => HEARTBEAT_DATA::EXTRA_CRC,
33990            HIGHRES_IMU_DATA::ID => HIGHRES_IMU_DATA::EXTRA_CRC,
33991            HIGH_LATENCY_DATA::ID => HIGH_LATENCY_DATA::EXTRA_CRC,
33992            HIGH_LATENCY2_DATA::ID => HIGH_LATENCY2_DATA::EXTRA_CRC,
33993            HIL_ACTUATOR_CONTROLS_DATA::ID => HIL_ACTUATOR_CONTROLS_DATA::EXTRA_CRC,
33994            HIL_CONTROLS_DATA::ID => HIL_CONTROLS_DATA::EXTRA_CRC,
33995            HIL_GPS_DATA::ID => HIL_GPS_DATA::EXTRA_CRC,
33996            HIL_OPTICAL_FLOW_DATA::ID => HIL_OPTICAL_FLOW_DATA::EXTRA_CRC,
33997            HIL_RC_INPUTS_RAW_DATA::ID => HIL_RC_INPUTS_RAW_DATA::EXTRA_CRC,
33998            HIL_SENSOR_DATA::ID => HIL_SENSOR_DATA::EXTRA_CRC,
33999            HIL_STATE_DATA::ID => HIL_STATE_DATA::EXTRA_CRC,
34000            HIL_STATE_QUATERNION_DATA::ID => HIL_STATE_QUATERNION_DATA::EXTRA_CRC,
34001            HOME_POSITION_DATA::ID => HOME_POSITION_DATA::EXTRA_CRC,
34002            HYGROMETER_SENSOR_DATA::ID => HYGROMETER_SENSOR_DATA::EXTRA_CRC,
34003            ILLUMINATOR_STATUS_DATA::ID => ILLUMINATOR_STATUS_DATA::EXTRA_CRC,
34004            ISBD_LINK_STATUS_DATA::ID => ISBD_LINK_STATUS_DATA::EXTRA_CRC,
34005            LANDING_TARGET_DATA::ID => LANDING_TARGET_DATA::EXTRA_CRC,
34006            LINK_NODE_STATUS_DATA::ID => LINK_NODE_STATUS_DATA::EXTRA_CRC,
34007            LOCAL_POSITION_NED_DATA::ID => LOCAL_POSITION_NED_DATA::EXTRA_CRC,
34008            LOCAL_POSITION_NED_COV_DATA::ID => LOCAL_POSITION_NED_COV_DATA::EXTRA_CRC,
34009            LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA::ID => {
34010                LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_DATA::EXTRA_CRC
34011            }
34012            LOGGING_ACK_DATA::ID => LOGGING_ACK_DATA::EXTRA_CRC,
34013            LOGGING_DATA_DATA::ID => LOGGING_DATA_DATA::EXTRA_CRC,
34014            LOGGING_DATA_ACKED_DATA::ID => LOGGING_DATA_ACKED_DATA::EXTRA_CRC,
34015            LOG_DATA_DATA::ID => LOG_DATA_DATA::EXTRA_CRC,
34016            LOG_ENTRY_DATA::ID => LOG_ENTRY_DATA::EXTRA_CRC,
34017            LOG_ERASE_DATA::ID => LOG_ERASE_DATA::EXTRA_CRC,
34018            LOG_REQUEST_DATA_DATA::ID => LOG_REQUEST_DATA_DATA::EXTRA_CRC,
34019            LOG_REQUEST_END_DATA::ID => LOG_REQUEST_END_DATA::EXTRA_CRC,
34020            LOG_REQUEST_LIST_DATA::ID => LOG_REQUEST_LIST_DATA::EXTRA_CRC,
34021            MAG_CAL_REPORT_DATA::ID => MAG_CAL_REPORT_DATA::EXTRA_CRC,
34022            MANUAL_CONTROL_DATA::ID => MANUAL_CONTROL_DATA::EXTRA_CRC,
34023            MANUAL_SETPOINT_DATA::ID => MANUAL_SETPOINT_DATA::EXTRA_CRC,
34024            MEMORY_VECT_DATA::ID => MEMORY_VECT_DATA::EXTRA_CRC,
34025            MESSAGE_INTERVAL_DATA::ID => MESSAGE_INTERVAL_DATA::EXTRA_CRC,
34026            MISSION_ACK_DATA::ID => MISSION_ACK_DATA::EXTRA_CRC,
34027            MISSION_CLEAR_ALL_DATA::ID => MISSION_CLEAR_ALL_DATA::EXTRA_CRC,
34028            MISSION_COUNT_DATA::ID => MISSION_COUNT_DATA::EXTRA_CRC,
34029            MISSION_CURRENT_DATA::ID => MISSION_CURRENT_DATA::EXTRA_CRC,
34030            MISSION_ITEM_DATA::ID => MISSION_ITEM_DATA::EXTRA_CRC,
34031            MISSION_ITEM_INT_DATA::ID => MISSION_ITEM_INT_DATA::EXTRA_CRC,
34032            MISSION_ITEM_REACHED_DATA::ID => MISSION_ITEM_REACHED_DATA::EXTRA_CRC,
34033            MISSION_REQUEST_DATA::ID => MISSION_REQUEST_DATA::EXTRA_CRC,
34034            MISSION_REQUEST_INT_DATA::ID => MISSION_REQUEST_INT_DATA::EXTRA_CRC,
34035            MISSION_REQUEST_LIST_DATA::ID => MISSION_REQUEST_LIST_DATA::EXTRA_CRC,
34036            MISSION_REQUEST_PARTIAL_LIST_DATA::ID => MISSION_REQUEST_PARTIAL_LIST_DATA::EXTRA_CRC,
34037            MISSION_SET_CURRENT_DATA::ID => MISSION_SET_CURRENT_DATA::EXTRA_CRC,
34038            MISSION_WRITE_PARTIAL_LIST_DATA::ID => MISSION_WRITE_PARTIAL_LIST_DATA::EXTRA_CRC,
34039            MOUNT_ORIENTATION_DATA::ID => MOUNT_ORIENTATION_DATA::EXTRA_CRC,
34040            NAMED_VALUE_FLOAT_DATA::ID => NAMED_VALUE_FLOAT_DATA::EXTRA_CRC,
34041            NAMED_VALUE_INT_DATA::ID => NAMED_VALUE_INT_DATA::EXTRA_CRC,
34042            NAV_CONTROLLER_OUTPUT_DATA::ID => NAV_CONTROLLER_OUTPUT_DATA::EXTRA_CRC,
34043            OBSTACLE_DISTANCE_DATA::ID => OBSTACLE_DISTANCE_DATA::EXTRA_CRC,
34044            ODOMETRY_DATA::ID => ODOMETRY_DATA::EXTRA_CRC,
34045            ONBOARD_COMPUTER_STATUS_DATA::ID => ONBOARD_COMPUTER_STATUS_DATA::EXTRA_CRC,
34046            OPEN_DRONE_ID_ARM_STATUS_DATA::ID => OPEN_DRONE_ID_ARM_STATUS_DATA::EXTRA_CRC,
34047            OPEN_DRONE_ID_AUTHENTICATION_DATA::ID => OPEN_DRONE_ID_AUTHENTICATION_DATA::EXTRA_CRC,
34048            OPEN_DRONE_ID_BASIC_ID_DATA::ID => OPEN_DRONE_ID_BASIC_ID_DATA::EXTRA_CRC,
34049            OPEN_DRONE_ID_LOCATION_DATA::ID => OPEN_DRONE_ID_LOCATION_DATA::EXTRA_CRC,
34050            OPEN_DRONE_ID_MESSAGE_PACK_DATA::ID => OPEN_DRONE_ID_MESSAGE_PACK_DATA::EXTRA_CRC,
34051            OPEN_DRONE_ID_OPERATOR_ID_DATA::ID => OPEN_DRONE_ID_OPERATOR_ID_DATA::EXTRA_CRC,
34052            OPEN_DRONE_ID_SELF_ID_DATA::ID => OPEN_DRONE_ID_SELF_ID_DATA::EXTRA_CRC,
34053            OPEN_DRONE_ID_SYSTEM_DATA::ID => OPEN_DRONE_ID_SYSTEM_DATA::EXTRA_CRC,
34054            OPEN_DRONE_ID_SYSTEM_UPDATE_DATA::ID => OPEN_DRONE_ID_SYSTEM_UPDATE_DATA::EXTRA_CRC,
34055            OPTICAL_FLOW_DATA::ID => OPTICAL_FLOW_DATA::EXTRA_CRC,
34056            OPTICAL_FLOW_RAD_DATA::ID => OPTICAL_FLOW_RAD_DATA::EXTRA_CRC,
34057            ORBIT_EXECUTION_STATUS_DATA::ID => ORBIT_EXECUTION_STATUS_DATA::EXTRA_CRC,
34058            PARAM_EXT_ACK_DATA::ID => PARAM_EXT_ACK_DATA::EXTRA_CRC,
34059            PARAM_EXT_REQUEST_LIST_DATA::ID => PARAM_EXT_REQUEST_LIST_DATA::EXTRA_CRC,
34060            PARAM_EXT_REQUEST_READ_DATA::ID => PARAM_EXT_REQUEST_READ_DATA::EXTRA_CRC,
34061            PARAM_EXT_SET_DATA::ID => PARAM_EXT_SET_DATA::EXTRA_CRC,
34062            PARAM_EXT_VALUE_DATA::ID => PARAM_EXT_VALUE_DATA::EXTRA_CRC,
34063            PARAM_MAP_RC_DATA::ID => PARAM_MAP_RC_DATA::EXTRA_CRC,
34064            PARAM_REQUEST_LIST_DATA::ID => PARAM_REQUEST_LIST_DATA::EXTRA_CRC,
34065            PARAM_REQUEST_READ_DATA::ID => PARAM_REQUEST_READ_DATA::EXTRA_CRC,
34066            PARAM_SET_DATA::ID => PARAM_SET_DATA::EXTRA_CRC,
34067            PARAM_VALUE_DATA::ID => PARAM_VALUE_DATA::EXTRA_CRC,
34068            PING_DATA::ID => PING_DATA::EXTRA_CRC,
34069            PLAY_TUNE_DATA::ID => PLAY_TUNE_DATA::EXTRA_CRC,
34070            PLAY_TUNE_V2_DATA::ID => PLAY_TUNE_V2_DATA::EXTRA_CRC,
34071            POSITION_TARGET_GLOBAL_INT_DATA::ID => POSITION_TARGET_GLOBAL_INT_DATA::EXTRA_CRC,
34072            POSITION_TARGET_LOCAL_NED_DATA::ID => POSITION_TARGET_LOCAL_NED_DATA::EXTRA_CRC,
34073            POWER_STATUS_DATA::ID => POWER_STATUS_DATA::EXTRA_CRC,
34074            PROTOCOL_VERSION_DATA::ID => PROTOCOL_VERSION_DATA::EXTRA_CRC,
34075            RADIO_STATUS_DATA::ID => RADIO_STATUS_DATA::EXTRA_CRC,
34076            RAW_IMU_DATA::ID => RAW_IMU_DATA::EXTRA_CRC,
34077            RAW_PRESSURE_DATA::ID => RAW_PRESSURE_DATA::EXTRA_CRC,
34078            RAW_RPM_DATA::ID => RAW_RPM_DATA::EXTRA_CRC,
34079            RC_CHANNELS_DATA::ID => RC_CHANNELS_DATA::EXTRA_CRC,
34080            RC_CHANNELS_OVERRIDE_DATA::ID => RC_CHANNELS_OVERRIDE_DATA::EXTRA_CRC,
34081            RC_CHANNELS_RAW_DATA::ID => RC_CHANNELS_RAW_DATA::EXTRA_CRC,
34082            RC_CHANNELS_SCALED_DATA::ID => RC_CHANNELS_SCALED_DATA::EXTRA_CRC,
34083            REQUEST_DATA_STREAM_DATA::ID => REQUEST_DATA_STREAM_DATA::EXTRA_CRC,
34084            REQUEST_EVENT_DATA::ID => REQUEST_EVENT_DATA::EXTRA_CRC,
34085            RESOURCE_REQUEST_DATA::ID => RESOURCE_REQUEST_DATA::EXTRA_CRC,
34086            RESPONSE_EVENT_ERROR_DATA::ID => RESPONSE_EVENT_ERROR_DATA::EXTRA_CRC,
34087            SAFETY_ALLOWED_AREA_DATA::ID => SAFETY_ALLOWED_AREA_DATA::EXTRA_CRC,
34088            SAFETY_SET_ALLOWED_AREA_DATA::ID => SAFETY_SET_ALLOWED_AREA_DATA::EXTRA_CRC,
34089            SCALED_IMU_DATA::ID => SCALED_IMU_DATA::EXTRA_CRC,
34090            SCALED_IMU2_DATA::ID => SCALED_IMU2_DATA::EXTRA_CRC,
34091            SCALED_IMU3_DATA::ID => SCALED_IMU3_DATA::EXTRA_CRC,
34092            SCALED_PRESSURE_DATA::ID => SCALED_PRESSURE_DATA::EXTRA_CRC,
34093            SCALED_PRESSURE2_DATA::ID => SCALED_PRESSURE2_DATA::EXTRA_CRC,
34094            SCALED_PRESSURE3_DATA::ID => SCALED_PRESSURE3_DATA::EXTRA_CRC,
34095            SERIAL_CONTROL_DATA::ID => SERIAL_CONTROL_DATA::EXTRA_CRC,
34096            SERVO_OUTPUT_RAW_DATA::ID => SERVO_OUTPUT_RAW_DATA::EXTRA_CRC,
34097            SETUP_SIGNING_DATA::ID => SETUP_SIGNING_DATA::EXTRA_CRC,
34098            SET_ACTUATOR_CONTROL_TARGET_DATA::ID => SET_ACTUATOR_CONTROL_TARGET_DATA::EXTRA_CRC,
34099            SET_ATTITUDE_TARGET_DATA::ID => SET_ATTITUDE_TARGET_DATA::EXTRA_CRC,
34100            SET_GPS_GLOBAL_ORIGIN_DATA::ID => SET_GPS_GLOBAL_ORIGIN_DATA::EXTRA_CRC,
34101            SET_HOME_POSITION_DATA::ID => SET_HOME_POSITION_DATA::EXTRA_CRC,
34102            SET_MODE_DATA::ID => SET_MODE_DATA::EXTRA_CRC,
34103            SET_POSITION_TARGET_GLOBAL_INT_DATA::ID => {
34104                SET_POSITION_TARGET_GLOBAL_INT_DATA::EXTRA_CRC
34105            }
34106            SET_POSITION_TARGET_LOCAL_NED_DATA::ID => SET_POSITION_TARGET_LOCAL_NED_DATA::EXTRA_CRC,
34107            SIM_STATE_DATA::ID => SIM_STATE_DATA::EXTRA_CRC,
34108            SMART_BATTERY_INFO_DATA::ID => SMART_BATTERY_INFO_DATA::EXTRA_CRC,
34109            STATUSTEXT_DATA::ID => STATUSTEXT_DATA::EXTRA_CRC,
34110            STORAGE_INFORMATION_DATA::ID => STORAGE_INFORMATION_DATA::EXTRA_CRC,
34111            SUPPORTED_TUNES_DATA::ID => SUPPORTED_TUNES_DATA::EXTRA_CRC,
34112            SYSTEM_TIME_DATA::ID => SYSTEM_TIME_DATA::EXTRA_CRC,
34113            SYS_STATUS_DATA::ID => SYS_STATUS_DATA::EXTRA_CRC,
34114            TERRAIN_CHECK_DATA::ID => TERRAIN_CHECK_DATA::EXTRA_CRC,
34115            TERRAIN_DATA_DATA::ID => TERRAIN_DATA_DATA::EXTRA_CRC,
34116            TERRAIN_REPORT_DATA::ID => TERRAIN_REPORT_DATA::EXTRA_CRC,
34117            TERRAIN_REQUEST_DATA::ID => TERRAIN_REQUEST_DATA::EXTRA_CRC,
34118            TIMESYNC_DATA::ID => TIMESYNC_DATA::EXTRA_CRC,
34119            TIME_ESTIMATE_TO_TARGET_DATA::ID => TIME_ESTIMATE_TO_TARGET_DATA::EXTRA_CRC,
34120            TRAJECTORY_REPRESENTATION_BEZIER_DATA::ID => {
34121                TRAJECTORY_REPRESENTATION_BEZIER_DATA::EXTRA_CRC
34122            }
34123            TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA::ID => {
34124                TRAJECTORY_REPRESENTATION_WAYPOINTS_DATA::EXTRA_CRC
34125            }
34126            TUNNEL_DATA::ID => TUNNEL_DATA::EXTRA_CRC,
34127            UAVCAN_NODE_INFO_DATA::ID => UAVCAN_NODE_INFO_DATA::EXTRA_CRC,
34128            UAVCAN_NODE_STATUS_DATA::ID => UAVCAN_NODE_STATUS_DATA::EXTRA_CRC,
34129            UTM_GLOBAL_POSITION_DATA::ID => UTM_GLOBAL_POSITION_DATA::EXTRA_CRC,
34130            V2_EXTENSION_DATA::ID => V2_EXTENSION_DATA::EXTRA_CRC,
34131            VFR_HUD_DATA::ID => VFR_HUD_DATA::EXTRA_CRC,
34132            VIBRATION_DATA::ID => VIBRATION_DATA::EXTRA_CRC,
34133            VICON_POSITION_ESTIMATE_DATA::ID => VICON_POSITION_ESTIMATE_DATA::EXTRA_CRC,
34134            VIDEO_STREAM_INFORMATION_DATA::ID => VIDEO_STREAM_INFORMATION_DATA::EXTRA_CRC,
34135            VIDEO_STREAM_STATUS_DATA::ID => VIDEO_STREAM_STATUS_DATA::EXTRA_CRC,
34136            VISION_POSITION_ESTIMATE_DATA::ID => VISION_POSITION_ESTIMATE_DATA::EXTRA_CRC,
34137            VISION_SPEED_ESTIMATE_DATA::ID => VISION_SPEED_ESTIMATE_DATA::EXTRA_CRC,
34138            WHEEL_DISTANCE_DATA::ID => WHEEL_DISTANCE_DATA::EXTRA_CRC,
34139            WIFI_CONFIG_AP_DATA::ID => WIFI_CONFIG_AP_DATA::EXTRA_CRC,
34140            WINCH_STATUS_DATA::ID => WINCH_STATUS_DATA::EXTRA_CRC,
34141            WIND_COV_DATA::ID => WIND_COV_DATA::EXTRA_CRC,
34142            _ => 0,
34143        }
34144    }
34145    fn target_system_id(&self) -> Option<u8> {
34146        match self {
34147            Self::AUTOPILOT_STATE_FOR_GIMBAL_DEVICE(inner) => Some(inner.target_system),
34148            Self::CANFD_FRAME(inner) => Some(inner.target_system),
34149            Self::CAN_FILTER_MODIFY(inner) => Some(inner.target_system),
34150            Self::CAN_FRAME(inner) => Some(inner.target_system),
34151            Self::CHANGE_OPERATOR_CONTROL(inner) => Some(inner.target_system),
34152            Self::COMMAND_ACK(inner) => Some(inner.target_system),
34153            Self::COMMAND_CANCEL(inner) => Some(inner.target_system),
34154            Self::COMMAND_INT(inner) => Some(inner.target_system),
34155            Self::COMMAND_LONG(inner) => Some(inner.target_system),
34156            Self::FILE_TRANSFER_PROTOCOL(inner) => Some(inner.target_system),
34157            Self::GIMBAL_DEVICE_ATTITUDE_STATUS(inner) => Some(inner.target_system),
34158            Self::GIMBAL_DEVICE_SET_ATTITUDE(inner) => Some(inner.target_system),
34159            Self::GIMBAL_MANAGER_SET_ATTITUDE(inner) => Some(inner.target_system),
34160            Self::GIMBAL_MANAGER_SET_MANUAL_CONTROL(inner) => Some(inner.target_system),
34161            Self::GIMBAL_MANAGER_SET_PITCHYAW(inner) => Some(inner.target_system),
34162            Self::GPS_INJECT_DATA(inner) => Some(inner.target_system),
34163            Self::LOGGING_ACK(inner) => Some(inner.target_system),
34164            Self::LOGGING_DATA(inner) => Some(inner.target_system),
34165            Self::LOGGING_DATA_ACKED(inner) => Some(inner.target_system),
34166            Self::LOG_ERASE(inner) => Some(inner.target_system),
34167            Self::LOG_REQUEST_DATA(inner) => Some(inner.target_system),
34168            Self::LOG_REQUEST_END(inner) => Some(inner.target_system),
34169            Self::LOG_REQUEST_LIST(inner) => Some(inner.target_system),
34170            Self::MISSION_ACK(inner) => Some(inner.target_system),
34171            Self::MISSION_CLEAR_ALL(inner) => Some(inner.target_system),
34172            Self::MISSION_COUNT(inner) => Some(inner.target_system),
34173            Self::MISSION_ITEM(inner) => Some(inner.target_system),
34174            Self::MISSION_ITEM_INT(inner) => Some(inner.target_system),
34175            Self::MISSION_REQUEST(inner) => Some(inner.target_system),
34176            Self::MISSION_REQUEST_INT(inner) => Some(inner.target_system),
34177            Self::MISSION_REQUEST_LIST(inner) => Some(inner.target_system),
34178            Self::MISSION_REQUEST_PARTIAL_LIST(inner) => Some(inner.target_system),
34179            Self::MISSION_SET_CURRENT(inner) => Some(inner.target_system),
34180            Self::MISSION_WRITE_PARTIAL_LIST(inner) => Some(inner.target_system),
34181            Self::OPEN_DRONE_ID_AUTHENTICATION(inner) => Some(inner.target_system),
34182            Self::OPEN_DRONE_ID_BASIC_ID(inner) => Some(inner.target_system),
34183            Self::OPEN_DRONE_ID_LOCATION(inner) => Some(inner.target_system),
34184            Self::OPEN_DRONE_ID_MESSAGE_PACK(inner) => Some(inner.target_system),
34185            Self::OPEN_DRONE_ID_OPERATOR_ID(inner) => Some(inner.target_system),
34186            Self::OPEN_DRONE_ID_SELF_ID(inner) => Some(inner.target_system),
34187            Self::OPEN_DRONE_ID_SYSTEM(inner) => Some(inner.target_system),
34188            Self::OPEN_DRONE_ID_SYSTEM_UPDATE(inner) => Some(inner.target_system),
34189            Self::PARAM_EXT_REQUEST_LIST(inner) => Some(inner.target_system),
34190            Self::PARAM_EXT_REQUEST_READ(inner) => Some(inner.target_system),
34191            Self::PARAM_EXT_SET(inner) => Some(inner.target_system),
34192            Self::PARAM_MAP_RC(inner) => Some(inner.target_system),
34193            Self::PARAM_REQUEST_LIST(inner) => Some(inner.target_system),
34194            Self::PARAM_REQUEST_READ(inner) => Some(inner.target_system),
34195            Self::PARAM_SET(inner) => Some(inner.target_system),
34196            Self::PING(inner) => Some(inner.target_system),
34197            Self::PLAY_TUNE(inner) => Some(inner.target_system),
34198            Self::PLAY_TUNE_V2(inner) => Some(inner.target_system),
34199            Self::RC_CHANNELS_OVERRIDE(inner) => Some(inner.target_system),
34200            Self::REQUEST_DATA_STREAM(inner) => Some(inner.target_system),
34201            Self::REQUEST_EVENT(inner) => Some(inner.target_system),
34202            Self::RESPONSE_EVENT_ERROR(inner) => Some(inner.target_system),
34203            Self::SAFETY_SET_ALLOWED_AREA(inner) => Some(inner.target_system),
34204            Self::SERIAL_CONTROL(inner) => Some(inner.target_system),
34205            Self::SETUP_SIGNING(inner) => Some(inner.target_system),
34206            Self::SET_ACTUATOR_CONTROL_TARGET(inner) => Some(inner.target_system),
34207            Self::SET_ATTITUDE_TARGET(inner) => Some(inner.target_system),
34208            Self::SET_GPS_GLOBAL_ORIGIN(inner) => Some(inner.target_system),
34209            Self::SET_HOME_POSITION(inner) => Some(inner.target_system),
34210            Self::SET_MODE(inner) => Some(inner.target_system),
34211            Self::SET_POSITION_TARGET_GLOBAL_INT(inner) => Some(inner.target_system),
34212            Self::SET_POSITION_TARGET_LOCAL_NED(inner) => Some(inner.target_system),
34213            Self::SUPPORTED_TUNES(inner) => Some(inner.target_system),
34214            Self::TIMESYNC(inner) => Some(inner.target_system),
34215            Self::TUNNEL(inner) => Some(inner.target_system),
34216            Self::V2_EXTENSION(inner) => Some(inner.target_system),
34217            _ => None,
34218        }
34219    }
34220    fn target_component_id(&self) -> Option<u8> {
34221        match self {
34222            Self::AUTOPILOT_STATE_FOR_GIMBAL_DEVICE(inner) => Some(inner.target_component),
34223            Self::CANFD_FRAME(inner) => Some(inner.target_component),
34224            Self::CAN_FILTER_MODIFY(inner) => Some(inner.target_component),
34225            Self::CAN_FRAME(inner) => Some(inner.target_component),
34226            Self::COMMAND_ACK(inner) => Some(inner.target_component),
34227            Self::COMMAND_CANCEL(inner) => Some(inner.target_component),
34228            Self::COMMAND_INT(inner) => Some(inner.target_component),
34229            Self::COMMAND_LONG(inner) => Some(inner.target_component),
34230            Self::FILE_TRANSFER_PROTOCOL(inner) => Some(inner.target_component),
34231            Self::GIMBAL_DEVICE_ATTITUDE_STATUS(inner) => Some(inner.target_component),
34232            Self::GIMBAL_DEVICE_SET_ATTITUDE(inner) => Some(inner.target_component),
34233            Self::GIMBAL_MANAGER_SET_ATTITUDE(inner) => Some(inner.target_component),
34234            Self::GIMBAL_MANAGER_SET_MANUAL_CONTROL(inner) => Some(inner.target_component),
34235            Self::GIMBAL_MANAGER_SET_PITCHYAW(inner) => Some(inner.target_component),
34236            Self::GPS_INJECT_DATA(inner) => Some(inner.target_component),
34237            Self::LOGGING_ACK(inner) => Some(inner.target_component),
34238            Self::LOGGING_DATA(inner) => Some(inner.target_component),
34239            Self::LOGGING_DATA_ACKED(inner) => Some(inner.target_component),
34240            Self::LOG_ERASE(inner) => Some(inner.target_component),
34241            Self::LOG_REQUEST_DATA(inner) => Some(inner.target_component),
34242            Self::LOG_REQUEST_END(inner) => Some(inner.target_component),
34243            Self::LOG_REQUEST_LIST(inner) => Some(inner.target_component),
34244            Self::MISSION_ACK(inner) => Some(inner.target_component),
34245            Self::MISSION_CLEAR_ALL(inner) => Some(inner.target_component),
34246            Self::MISSION_COUNT(inner) => Some(inner.target_component),
34247            Self::MISSION_ITEM(inner) => Some(inner.target_component),
34248            Self::MISSION_ITEM_INT(inner) => Some(inner.target_component),
34249            Self::MISSION_REQUEST(inner) => Some(inner.target_component),
34250            Self::MISSION_REQUEST_INT(inner) => Some(inner.target_component),
34251            Self::MISSION_REQUEST_LIST(inner) => Some(inner.target_component),
34252            Self::MISSION_REQUEST_PARTIAL_LIST(inner) => Some(inner.target_component),
34253            Self::MISSION_SET_CURRENT(inner) => Some(inner.target_component),
34254            Self::MISSION_WRITE_PARTIAL_LIST(inner) => Some(inner.target_component),
34255            Self::OPEN_DRONE_ID_AUTHENTICATION(inner) => Some(inner.target_component),
34256            Self::OPEN_DRONE_ID_BASIC_ID(inner) => Some(inner.target_component),
34257            Self::OPEN_DRONE_ID_LOCATION(inner) => Some(inner.target_component),
34258            Self::OPEN_DRONE_ID_MESSAGE_PACK(inner) => Some(inner.target_component),
34259            Self::OPEN_DRONE_ID_OPERATOR_ID(inner) => Some(inner.target_component),
34260            Self::OPEN_DRONE_ID_SELF_ID(inner) => Some(inner.target_component),
34261            Self::OPEN_DRONE_ID_SYSTEM(inner) => Some(inner.target_component),
34262            Self::OPEN_DRONE_ID_SYSTEM_UPDATE(inner) => Some(inner.target_component),
34263            Self::PARAM_EXT_REQUEST_LIST(inner) => Some(inner.target_component),
34264            Self::PARAM_EXT_REQUEST_READ(inner) => Some(inner.target_component),
34265            Self::PARAM_EXT_SET(inner) => Some(inner.target_component),
34266            Self::PARAM_MAP_RC(inner) => Some(inner.target_component),
34267            Self::PARAM_REQUEST_LIST(inner) => Some(inner.target_component),
34268            Self::PARAM_REQUEST_READ(inner) => Some(inner.target_component),
34269            Self::PARAM_SET(inner) => Some(inner.target_component),
34270            Self::PING(inner) => Some(inner.target_component),
34271            Self::PLAY_TUNE(inner) => Some(inner.target_component),
34272            Self::PLAY_TUNE_V2(inner) => Some(inner.target_component),
34273            Self::RC_CHANNELS_OVERRIDE(inner) => Some(inner.target_component),
34274            Self::REQUEST_DATA_STREAM(inner) => Some(inner.target_component),
34275            Self::REQUEST_EVENT(inner) => Some(inner.target_component),
34276            Self::RESPONSE_EVENT_ERROR(inner) => Some(inner.target_component),
34277            Self::SAFETY_SET_ALLOWED_AREA(inner) => Some(inner.target_component),
34278            Self::SERIAL_CONTROL(inner) => Some(inner.target_component),
34279            Self::SETUP_SIGNING(inner) => Some(inner.target_component),
34280            Self::SET_ACTUATOR_CONTROL_TARGET(inner) => Some(inner.target_component),
34281            Self::SET_ATTITUDE_TARGET(inner) => Some(inner.target_component),
34282            Self::SET_POSITION_TARGET_GLOBAL_INT(inner) => Some(inner.target_component),
34283            Self::SET_POSITION_TARGET_LOCAL_NED(inner) => Some(inner.target_component),
34284            Self::SUPPORTED_TUNES(inner) => Some(inner.target_component),
34285            Self::TIMESYNC(inner) => Some(inner.target_component),
34286            Self::TUNNEL(inner) => Some(inner.target_component),
34287            Self::V2_EXTENSION(inner) => Some(inner.target_component),
34288            _ => None,
34289        }
34290    }
34291}